”一維前綴和“算法原理及模板

前綴和,就是通過一種方法來求出數組中某個連續區間的元素的和的辦法。我們通常先預處理出來一個前綴和數組,然后把數組中進行元素填充后再進行后續使用。

我們通過一道模板題或許能更加理解其意思。?

現在的問題就是:如果我們用暴力枚舉來記錄每次l與r之間的和,那么肯定是會超時的(時間復雜度O(N*q)),我們要另辟蹊徑。我們用一下上面的前綴和算法。

假設我們原有的數組為arr,現在我們要另創建一個數組dp。這個dp數組的每一個元素dp[i]記錄著arr[i]及之前的元素之和。

注意,我們這里的arr和dp中的i都是以1開始記錄而不是0,稍后我們解釋一下原因,我們先把arr[0]和dp[0]都看成0。dp中的元素計算公式為:
dp[i]=dp[i-1]+arr[i];

利用這個公式,我們也可以把dp數組進行初始化。接下來就是如何使用,

假設我們要求l-r的和,只需要用dp[r]-dp[l-1]即可。

通過這個公式我們就可以說明為什么下標需要從1開始了,如果l為0,也就是想求從最左到r,那么公式里就是dp[r]-dp[-1]。越界是萬萬不可的。所以我們要把arr和dp的0位置空出來并標記為0即可(0并不影響求和)。這種方法我們就成功把時間復雜度變成了o(q)+o(n)。

我們把題解寫一下,(代碼過程基本就是模板)

#include <iostream>
#include <vector>using namespace std;int main()
{int n,q;cin >>n>>q;//創建一個n+1個數大小的vector (0-n)vector <int>arr (n+1);for(int i=1;i<n+1;i++) cin>>arr[i];//創建前綴和數組vector<long long> dp(n+1);for(int i=1;i<n+1;i++) dp[i]=dp[i-1]+arr[i];//使用前綴和int l=0,r=0;while(q--){cin>>l>>r;cout<<dp[r]-dp[l-1]<<endl;}return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/83331.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83331.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/83331.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

5.13/14 linux安裝centos及一些操作命令隨記

一、環境準備 VMware Workstation版本選擇建議 CentOS 7 ISO鏡像下載指引 虛擬機硬件配置建議&#xff08;內存/處理器/磁盤空間&#xff09; 二、系統基礎命令 一、環境準備 1.VMware Workstation版本選擇建議 版本選擇依據 選擇VMware Workstation的版本時&#xff0c…

spring學習->sprintboot

spring IoC(控制翻轉): 控制:資源的控制權(資源的創建&#xff0c;獲取&#xff0c;銷毀等) 反轉:和傳統方式不一樣(用上面new什么)&#xff0c;不用new讓ioc來發現你用什么&#xff0c;然后我來給什么 DI:(依賴注入) 依賴:組件的依賴關系。如newsController依賴NewsServi…

iOS 閱后即焚功能的實現

iOS閱后即焚功能實現步驟 一、功能設計要點 消息類型支持&#xff1a;文本、圖片、視頻、音頻等。銷毀觸發條件&#xff1a; 接收方首次打開消息后啟動倒計時。消息存活時間可配置&#xff08;如5秒、1分鐘&#xff09;。 安全要求&#xff1a; 端到端加密&#xff08;E2EE&a…

OpenHarmony 開源鴻蒙南向開發——linux下使用make交叉編譯第三方庫——mqtt庫

準備工作 請依照這篇文章搭建環境 OpenHarmony 開源鴻蒙南向開發——linux下使用make交叉編譯第三方庫——環境配置_openharmony交叉編譯-CSDN博客 下載 wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.5/gnutls-3.5.9.tar.xz 解壓 tar -xf mkdir ./out cd ./out Cmake命…

武漢SMT貼片工藝優化與生產效能提升路徑

內容概要 隨著華中地區電子制造產業集群的快速發展&#xff0c;武漢SMT貼片行業面臨工藝升級與效能提升的雙重挑戰。本文聚焦SMT生產全流程中的關鍵環節&#xff0c;從鋼網印刷精度控制、回流焊溫度曲線優化、AOI檢測系統迭代三大核心工藝出發&#xff0c;結合區域產業鏈特點提…

線程池(ThreadPoolExecutor)實現原理和源碼細節是Java高并發面試和實戰開發的重點

一、線程池核心流程圖 ----------------- | 提交任務 | submit/execute -----------------|v ----------------- | 判斷核心線程數 | < corePoolSize&#xff1f; -----------------|Yes |Nov v [創建新線程] -----------------| 隊列是否滿&a…

學習海康VisionMaster之直方圖工具

一&#xff1a;進一步學習了 今天學習下VisionMaster中的直方圖工具&#xff1a;就是統計在ROI范圍內進行灰度級分布的統計 二&#xff1a;開始學習 1&#xff1a;什么是直方圖工具&#xff1f; 直方圖工具針對輸入灰度圖像的指定ROI區域&#xff0c;輸出該區域的圖像灰度直方…

計算機網絡 : Socket編程

計算機網絡 &#xff1a; Socket編程 目錄 計算機網絡 &#xff1a; Socket編程引言1.UDP網絡編程1.1 網絡地址與端口轉換函數1.2 本地環回1.3 EchoServer1.4 DictServer1.5 DictServer封裝版1.6 簡單聊天室 2.TCP網絡編程2.1 TCP Socket API詳解2.2 Echo Server2.3 Echo Serve…

Elasticsearch/OpenSearch 中doc_values的作用

目錄 1. 核心作用 2. 適用場景 3. 與 index 參數的對比 4. 典型配置示例 場景 1&#xff1a;僅用于聚合&#xff0c;禁止搜索 場景 2&#xff1a;優化大字段存儲 5. 性能調優建議 6. 底層原理 doc_values 是 Elasticsearch/OpenSearch 中用于優化查詢和聚合的列式存儲結…

使用mermaid 語言繪畫時序圖和鏈路圖

給大家展示一下效果&#xff0c; 官方地址&#xff1a;https://mermaid.nodejs.cn/ 官方開發地&#xff1a;https://mermaid.nodejs.cn/intro/#google_vignette graph LR%% 樣式定義&#xff08;完全保留&#xff09; classDef user fill:#E1F5FE,stroke:#0288D1;classDef …

C++ Kafka客戶端(cppkafka)安裝與問題解決指南

一、cppkafka簡介 cppkafka是一個現代C的Apache Kafka客戶端庫&#xff0c;它是對librdkafka的高級封裝&#xff0c;旨在簡化使用librdkafka的過程&#xff0c;同時保持最小的性能開銷。 #mermaid-svg-qDUFSYLBf8cKkvdw {font-family:"trebuchet ms",verdana,arial,…

STM32的ADC模塊中,**采樣時機(Sampling Time)**和**轉換時機(Conversion Time),獲取數據的時機詳解

在STM32的ADC模塊中&#xff0c;**采樣時機&#xff08;Sampling Time&#xff09;和轉換時機&#xff08;Conversion Time&#xff09;**是ADC工作流程中的兩個關鍵階段&#xff0c;直接影響采樣精度和系統實時性。以下是詳細解析&#xff1a; 1. 采樣時機&#xff08;Samplin…

Pageassist安裝(ollama+deepseek-r1)

page-assist網站&#xff1a;https://github.com/n4ze3m/page-assist 首先電腦配置node.js&#xff0c;管理員打開命令窗口輸入下面命令下載bun npm install -g buncd 到你想要安裝page-assist的地方&#xff08;推薦桌面&#xff09; 輸入下列命令 git clone https://gith…

APC 熒光通道專用!Elabscience? CD11b 抗體激發 / 發射光譜精準匹配流式檢測

內容概要 Elabscience APC Anti-Mouse/Human CD11b Antibody [M1/70]&#xff08;貨號&#xff1a;E-AB-F1081E&#xff09;是一款高特異性熒光標記抗體&#xff0c;適用于流式細胞術&#xff08;FCM&#xff09;&#xff0c;可精準檢測小鼠和人類樣本中的 CD11b 髓系細胞&…

entity線段材質設置

在cesium中,我們可以改變其entity線段材質,這里以直線為例. 首先我們先創建一條直線 const redLine viewer.entities.add({polyline: {positions: Cesium.Cartesian3.fromDegreesArray([-75,35,-125,35,]),width: 5,material:material, 保存后可看到在地圖上創建了一條線段…

大模型數據分析破局之路20250512

大模型數據分析破局之路 本文面向 AI 初學者、數據分析從業者與企業技術負責人&#xff0c;圍繞大模型如何為數據分析帶來范式轉變展開&#xff0c;從傳統數據分析困境談起&#xff0c;延伸到 LLM MCP 的協同突破&#xff0c;最終落腳在企業實踐建議。 &#x1f30d; 開篇導語…

【MySQL】索引太多會怎樣?

在 MySQL 中&#xff0c;雖然索引可以顯著提高查詢效率&#xff0c;但過多的索引&#xff08;如超過 5-6 個&#xff09;會帶來以下弊端&#xff1a; 1. 存儲空間占用增加 每個索引都需要額外的磁盤空間存儲索引樹&#xff08;BTree&#xff09;。對于大表來說&#xff0c;多個…

使用PocketFlowSharp創建一個Human_Evaluation示例

效果 實踐 有時候AI生成的結果我們并不滿意在進入下一步之前&#xff0c;我們需要對AI生成的結果進行人工審核&#xff0c;同意了才能進入下一個流程。 Human_Evaluation就是人工判斷的一個簡單示例。 internal class Program{static async Task Main(string[] args){// Load…

【項目】自主實現HTTP服務器:從Socket到CGI全流程解析

00 引言 ? 在構建高效、可擴展的網絡應用時&#xff0c;理解HTTP服務器的底層原理是一項必不可少的技能。現代瀏覽器與移動應用大量依賴HTTP協議完成前后端通信&#xff0c;而這一過程的背后&#xff0c;是由網絡套接字驅動的請求解析、響應構建、數據傳輸等一系列機制所支撐…

SQL練習(6/81)

目錄 1.尋找連續值 方法一&#xff1a;使用自連接&#xff08;Self-Join&#xff09; 方法二&#xff1a;使用窗口函數&#xff08;Window Functions&#xff09; 2.尋找有重復的值 GROUP BY子句 HAVING子句 常用聚合函數&#xff1a; 3.找不存在某屬性的值 not in no…