字首和 差分

2021-10-05 12:07:31 字數 1614 閱讀 3807

顧名思義:用某乙個陣列來記錄陣列a前i項和,這個還可以用來求區間[l,r]的和:s[r]-s[l-1](因為第l項也在區間內)

話不多說,直接上例題:leetcode 5393

ac**:

const

int maxn =

1e5+5;

class

solution

int ans =0;

for(

int i =

0;i <= k;

++i)

return ans;}}

;

傳送門:洛谷p3397

下面貼下ac**(後面有利用差分的優化):

#include

#include

#include

using

namespace std;

const

int maxn =

1000+5

;int n,m;

int ans[maxn]

[maxn]

;int

main

(void)}

for(

int x =

1;x <= n;

++x)

printf

("\n");

}return0;

}

#include

#include

#include

using

namespace std;

const

int maxn =

1000+5

;int n,m;

int ans[maxn]

[maxn]

,p[maxn]

[maxn]

;int

main

(void)}

for(

int x =

1;x <= n;

++x)

printf

("\n");

}return0;

}

ac**:

#include

#include

#include

#include

#define ll long long

using

namespace std;

const

int maxn =

1e5+5;

ll a[maxn]

,b[maxn]

,c[maxn]

,times[maxn]

,city[maxn]

;int n,m;

intmain

(void

)else

if(city[i]

> city[i-1]

)}ll ans =0;

for(

int i =

1;i < n;

++i)

cout << ans;

return0;

}

字首和 差分

數列的字首和 sum i 表示a 1 a i 的和 用處1 求i j的和sum j sum i 1 用處2 區間修改。設定乙個change陣列。當區間 i,j 上要加k時,我們令change i k,令change j 1 k。如果我們對change陣列求字首和的話,字首和sum change i ...

字首和 差分

有n個數和q次操作,每一次操作指明了要操作的區間 l,r 以及讓該區間內的所有元素全部加c 輸出q次操作後所有元素的大小 第一行 n q 1 n,q 2 105 第二行 n個數 a1,a2 an 106 ai 106 接下來q 行 每行3個數 l r c 表示 l,r 區間內每個數加c 1 l r ...

差分字首和

如果我給你一串長度為n的數列a1,a2,a3 an,再給出m個詢問,每次詢問給出l,r兩個數,要求給出區間 l,r 裡的數的和,你會怎麼做,若是沒有了解過字首和的人看到這道題的想法可能是對於m次詢問,我每次都遍歷一遍它給的區間,計算出答案,這樣子的方法固然沒錯,但是用了兩個迴圈,其時間複雜度達到了o...