C++算法·前綴和

前綴和(Prefix(Prefix(Prefix Sum)Sum)Sum)的定義

前綴和是一種高效處理區間求和問題的算法技巧
其核心思想是通過預處理構建一個前綴和數組
使得后續的區間和查詢可以在常數時間O(1)O(1)O(1)內完成

核心概念

  • 定義
    給定一個數組a[1...n]a[1...n]a[1...n],其前綴和數組s[1...n]s[1...n]s[1...n]定義為:
    s[0]=0(邊界條件)s[0]=0(邊界條件)s[0]=0(邊界條件)
    s[i]=a[1]+a[2]+...+a[i](前i個元素的和)s[i]=a[1]+a[2]+...+a[i](前i個元素的和)s[i]=a[1]+a[2]+...+a[i](i個元素的和)
    通過遞推計算:s[i]=s[i?1]+a[i]s[i]=s[i-1]+a[i]s[i]=s[i?1]+a[i]
  • 作用
    快速計算區間和:查詢a[l...r]a[l...r]a[l...r]的和時,只需計算s[r]?s[l?1]s[r]-s[l-1]s[r]?s[l?1],無需遍歷整個區間。
    優化時間復雜度:
    預處理:O(n)O(n)O(n)
    單次查詢:O(1)O(1)O(1)
    適用于頻繁查詢但數據不頻繁修改的場景(如靜態數組)

對比其他方法差距/使用前綴和的原因

方法預處理時間單次查詢時間適用場景
暴力遍歷O(1)O(n)查詢極少
前綴和O(n)O(1)查詢多,數據靜態
線段樹/樹狀數組O(n)O(log n)查詢和修改都頻繁

總結

前綴和通過空間換時間,將區間和查詢優化至O(1)O(1)O(1),是算法競賽中的常客
若需支持動態修改,可結合差分數組或升級為樹狀數組/線段樹

前綴和代碼模板示例

#include<iostream>
using namespace std;
const int N=1e6+10;
int a[N],s[N];
int main(){int n,q;//n=數組個數,q=詢問次數cin>>n>>q;for(int i=1;i<=n;i++){cin>>a[i];//讀入初值s[i]=s[i-1]+a[i];//計算前綴和}for(int i=1;i<=q;i++){int l,r;//詢問區間cin>>l>>r;cout<<s[r]-s[l-1]<<endl;//輸出區間和}return 0;
}

原理

非常EasyEasyEasy
前綴和數組s[x]s[x]s[x]的值相當于a[1]a[1]a[1]~a[x]a[x]a[x]
利用這個原理計算得知
a[l]到a[r]的和=s[r]?s[l?1]a[l]到a[r]的和=s[r]-s[l-1]a[l]a[r]的和=s[r]?s[l?1]

例題

P8218 【深進1.例1】求區間和

題目描述

給定由 nnn 個正整數組成的序列 a1,a2,?,ana_1, a_2, \cdots, a_na1?,a2?,?,an?mmm 個區間 [li,ri][l_i,r_i][li?,ri?],分別求這 mmm 個區間的區間和。

輸入格式

第一行包含一個正整數 nnn,表示序列的長度。

第二行包含 nnn 個正整數 a1,a2,?,ana_1,a_2, \cdots ,a_na1?,a2?,?,an?

第三行包含一個正整數 mmm,表示區間的數量。

接下來 mmm 行,每行包含兩個正整數 li,ril_i,r_ili?,ri?,滿足 1≤li≤ri≤n1\le l_i\le r_i\le n1li?ri?n

輸出格式

mmm 行,其中第 iii 行包含一個正整數,表示第 iii 組答案的詢問。

輸入輸出樣例 #1

輸入 #1

4
4 3 2 1
2
1 4
2 3

輸出 #1

10
5

說明/提示

樣例解釋

111 到第 444 個數加起來和為 101010。第 222 個數到第 333 個數加起來和為 555

數據范圍

對于 50%50 \%50% 的數據:n,m≤1000n,m\le 1000n,m1000

對于 100%100 \%100% 的數據:1≤n,m≤1051 \le n, m\le 10^51n,m1051≤ai≤1041 \le a_i\le 10^41ai?104

分析

經典的前綴和例題
看輸入要求,輸入數組個數nnn
然后給數組a[]a[]a[]初值,再輸入詢問次數mmm
mmm行的li,ril_i,r_ili?,ri?并詢問a[li]到a[ri]a[l_i]到a[r_i]a[li?]a[ri?]的區間和
跟模板一樣,但是需要把mmm的輸入改到輸入數組a[]a[]a[]的后方

ACACAC代碼

#include<iostream>
using namespace std;
const int N=1e6+10;
int a[N],s[N];
int main(){int n,m;//n=數組個數,m=詢問次數cin>>n;for(int i=1;i<=n;i++){cin>>a[i];//讀入初值s[i]=s[i-1]+a[i];//計算前綴和}cin>>m;for(int i=1;i<=m;i++){int l,r;//詢問區間cin>>l>>r;cout<<s[r]-s[l-1]<<endl;//輸出區間和}return 0;
}

題單附送

題單題單題單
包含前綴和、差分、離散化

~ 完結撒花完結撒花完結撒花 ~

附:例題來自洛谷洛谷洛谷
推薦洛谷洛谷洛谷作為為你的刷題區域
下一篇預告:還在找~

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

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

相關文章

JavaEE 初階第十七期:文件 IO 的 “管道藝術”(下)

專欄&#xff1a;JavaEE初階起飛計劃 個人主頁&#xff1a;手握風云 目錄 一、Java文件內容寫入 1.1. OutputStream 二、字符流讀取和寫入 2.1. Reader 2.2. Writer 三、示例練習 3.1. 查找文件功能 一、Java文件內容寫入 1.1. OutputStream OutputStream同樣只是?個抽…

【liunx】web高可用---nginx

NGINX簡介Nginx&#xff08;發音為 “engine x”&#xff09;是一款由俄羅斯程序員 Igor Sysoev 開發的 輕量級、高性能的 HTTP 和反向代理服務器&#xff0c;同時也是一個 IMAP/POP3/SMTP 代理服務器。自 2004 年首次發布以來&#xff0c;Nginx 憑借其 高并發處理能力、低內存…

FPGA+護理:跨學科發展的探索(二)

FPGA護理&#xff1a;跨學科發展的探索&#xff08;二&#xff09; 系列文章目錄 FPGA護理&#xff1a;跨學科發展的探索&#xff08;一&#xff09; 文章目錄FPGA護理&#xff1a;跨學科發展的探索&#xff08;二&#xff09;系列文章目錄引言三、FPGA 在精神醫學護理中的應用…

localforage的數據倉庫、實例、storeName和name的概念和區別

在 localForage 中&#xff0c;數據倉庫、實例、storeName 和 name 是核心概念&#xff0c;用于管理底層存儲&#xff08;IndexedDB/WebSQL/localStorage&#xff09;。以下是詳細解釋和區別&#xff1a; 1. 數據倉庫 (Database) 定義&#xff1a;指底層的物理數據庫&#xff…

使用MAS(Microsoft Activation Scripts)永久獲得win10專業版和office全套

文章目錄Microsoft Activation Scripts簡介下載地址使用方法Microsoft Activation Scripts簡介 MAS是Microsoft Activation Scripts縮寫。 主要提供如下功能&#xff1a; 使用該腳本可以永久獲得win10專業版和office全套&#xff08;可選&#xff09; 下載地址 https://pan…

零 shot 語義+在線閉環:深度學習讓機器人學會“主動”

來gongzhonghao【圖靈學術計算機論文輔導】&#xff0c;快速拿捏更多計算機SCI/CCF發文資訊&#xff5e;在當下&#xff0c;機器人與深度學習的融合正成為AI領域的核心發展趨勢&#xff0c;相關研究在頂會頂刊上熱度居高不下。從ICLR到CoRL&#xff0c;諸多前沿成果不斷涌現&am…

Nginx學習筆記(三)——在 CentOS 7 中配置阿里云鏡像源

&#x1f4da; Nginx學習筆記&#xff08;三&#xff09;——在 CentOS 7 中配置阿里云鏡像源 在 CentOS 7 中配置阿里云鏡像源可顯著提升軟件安裝和更新的速度&#xff0c;以下是詳細操作步驟&#xff1a; &#x1f527; 配置阿里云鏡像源步驟 1?? 備份原有源配置 sudo mv /…

WebSocket--簡單介紹

一、什么是 WebSocket&#xff1f;定義&#xff1a;WebSocket 是一種在單個 TCP 連接上進行全雙工通信的協議。作用&#xff1a;實現客戶端&#xff08;瀏覽器&#xff09;和服務器之間的實時、雙向通信。優勢&#xff1a;連接保持&#xff0c;通信實時性強&#xff08;不像 HT…

【STM32 LWIP配置】STM32H723ZG + Ethernet +LWIP 配置 cubemx

STM32H723ZG LAN8742 Ethernet LWIP 配置 cubemx &#x1f31e;這邊記錄一下這塊mcu 配置以太網的過程&#xff0c;IDE是KEIL MDK&#xff0c;其實就是在下面多次提到的blog的基礎上 在scatter file進行配置 首先&#xff0c;如果想要簡單一點 直接去cubemx 那邊獲取相關的例…

EI檢索-學術會議 | 人工智能、虛擬現實、可視化

第五屆人工智能、虛擬現實與可視化國際學術會議&#xff08;AIVRV 2025&#xff09;定于2025年9月5-7日在中國 成都召開。人工智能正驅動各行業智能化轉型&#xff0c;提升效率與質量&#xff1b;虛擬現實技術以其沉浸感重塑教育、娛樂、醫療等領域體驗&#xff1b;可視化技術…

力扣(H指數)

一、題目分析 &#xff08;一&#xff09;問題描述 給定一個整數數組 citations&#xff0c;其中 citations[i] 表示研究者的第 i 篇論文被引用的次數。我們需要計算并返回該研究者的 H 指數。根據維基百科定義&#xff1a;H 指數代表“高引用次數”&#xff0c;一名科研人員的…

標準io(1)

標準I/O基礎概念標準I/O&#xff08;Standard Input/Output&#xff09;是C語言提供的一組高級文件操作函數&#xff0c;位于<stdio.h>頭文件中。與低級I/O&#xff08;如Unix的系統調用read/write&#xff09;相比&#xff0c;標準I/O引入了緩沖機制&#xff0c;能顯著提…

線性代數1000題學習筆記

1000題線代基礎第一章1-101000題線代基礎第二章1-171000題線代基礎第三章1-11

LeetCode算法日記 - Day 8: 串聯所有單詞的子串、最小覆蓋子串

目錄 1.串聯所有單詞的子串 1.2 解法 1.3 代碼實現 2. 最小覆蓋子串 2.1 題目解析 2.2 解法 2.3 代碼實現 1.串聯所有單詞的子串 30. 串聯所有單詞的子串 - 力扣&#xff08;LeetCode&#xff09; 給定一個字符串 s 和一個字符串數組 words。 words 中所有字符串 長度…

linux實戰:基于Ubuntu的專業相機

核心組件就是QTimerOpenCV的組合方案攝像頭啟停控制用QPushButton實現&#xff0c;幀顯示必須用QLabel而不能用普通控件&#xff0c;視頻流刷新用QTimer比多線程更簡單想快速實現攝像頭控制功能&#xff0c;核心組件就是QTimerOpenCV的組合方案。攝像頭啟停控制用QPushButton實…

《深度剖析前端框架中錯誤邊界:異常處理的基石與進階》

錯誤邊界作為一種特殊的組件機制&#xff0c;正悄然重塑著應用應對異常的底層邏輯。它并非簡單的代碼片段組合&#xff0c;而是一套貫穿組件生命周期的防護體系&#xff0c;其核心價值在于將局部錯誤的影響牢牢鎖定在可控范圍內&#xff0c;避免整個應用陷入不可挽回的崩潰狀態…

6GB顯存玩轉SD微調!LoRA-scripts本地部署教程,一鍵煉出專屬AI畫師

一、介紹LoRA-scripts&#xff08;又名 SD-Trainer&#xff09;&#xff0c;是一個專為訓練低秩自適應&#xff08;LoRA&#xff09;模型設計的開源工具集主要應用于Stable Diffusion等AI繪圖模型的微調&#xff0c;幫助用戶高效創建定制化風格、角色或概念的輕量級模型。目前已…

探索AI的數學奇跡:Gemini 2.5 Pro如何摘得IMO金牌

?? 引言:從人類天才到AI奇才的跨越 想象一下,一個AI模型坐在國際數學奧林匹克(IMO)的考場里,手里拿著筆(好吧,其實是處理token),面對那些讓高中生們頭疼不已的難題。它不是靠死記硬背,而是通過深思熟慮的推理,一步步攻克難關。這聽起來像科幻小說,但2025年,這已…

MCP學習與實踐

目錄 1.MCP簡介 1.1 MCP是什么 1.2 MCP與Agent關系&#xff1a; 1.3 MCP的架構 2. MCP原理 2.1 MCP 工作過程 2.2 MCP 通訊方式 2. MCP使用 2.1 cursor中增加MCP-SSE(高德地圖MCP) 2.2 cursor中增加MCP-STDIO&#xff08;12306-MCP&#xff09; 本文詳細講解了什么是…

MySQL(187)如何使用pt-query-digest進行查詢分析?

使用 pt-query-digest 工具可以幫助分析 MySQL 查詢的性能&#xff0c;找出慢查詢、頻繁查詢以及消耗資源較多的查詢&#xff0c;從而為優化提供依據。以下是詳細深入的使用 pt-query-digest 進行查詢分析的步驟和相關示例。 一、安裝 pt-query-digest pt-query-digest 是 Perc…