差分陣列與字首和

2022-08-15 18:45:15 字數 771 閱讀 7528

字首和

字首和顧名思義就是前面i個數的總和。

假設有乙個序列a,字首和為s。根據概念很容易知到公式

\(s[i]=\displaystyle \sum_^ia[j]\)

如何求區間\([l,r]\)的和呢?

\(sum[l,r]=s[r]-s[l-1]\)

那如果要對多個不同區間

\([l,r]\)進行加減操作呢?然後輸出某個區間\([l,r]\)的區間和,接下來就要用到差分陣列了

差分陣列

設原陣列為\(a[i]\),差分陣列為\(b[i]\),則:

\[b[i]=\begin a[i]&i=1\\ a[i]-a[i-1]&i\geq2 \end

\]差分陣列的性質:

有n個數。m個操作,每一次操作,將x~y區間的所有數增加z;

最後有q個詢問,每一次詢問求出x~y的區間和。

設原陣列為\(a[i]\)

步驟:舉個栗子 航班預訂統計

這道題很簡單,沒有要求輸出區間和,也不用先求出差分陣列

#includeusing namespace std;

int n; //n個航班

int i; //i條預定記錄

int b[20005]; //差分陣列

int main()

for(int k=1;k<=n;k++)

cout<}

一維字首和與差分陣列

前言 對於一些列舉演算法題當中,往往會涉及到時間複雜度太高而無法ac的情況 利用字首和的方法可以以空間換時間,是對一些列舉題當中很重要的優化演算法。下面介紹兩常用的性質上用來輔助的演算法 核心思路 字首和 前n項的和 前n 1項和減去第n 1項 例題應用 隨機給定l和r兩個整數,返回arrays這個...

字首和 差分陣列 刷題總結

字首和主要適用的場景是原始陣列不會被修改的情況下,頻繁查詢某個區間的累加和。字首和,核心 就是下面這段 class prefixsum 查詢閉區間 i,j 的累加和 public intquery int i,int j prefix i 就代表著nums 0.i 1 所有元素的累加和,如果我們想求...

刷題筆記6 字首和 差分陣列

字首和的應用場景是,需要對某個區間 i j 頻繁查詢累計和,避免每次查詢都遍歷這個區間。差分陣列的應用場景是,需要對某個區間 i j 頻繁地加或減某一值,避免每次都遍歷這個區間。1.概念 一維字首和 vector nums vector sums nums.size 1,0 空間比nums大1,字首...