例題入口
#include
const
int n =
320;
int a[n * n]
;//a[i] = 1 a[i] = 0;
//1. 對a 求出平方數 將其值置為1 不是平方數就是0
//2. 對a求乙個字首和
//3.對 a,b 求乙個部分和
int sum[n * n]
;void
init()
for(
int i =
1; i <=
100000
; i++)}
int aa, bb;
int main (
)return0;
}
例如:一段序列(下標從1開始),我們序列a的區間【l,r】加d(把al, al+1,…,ar都加上d)。
d[l] += d;
d[r + 1] -= d;
最後通過差分序列還原原陣列即可求出原序列的值。
例題入口
#include
#include
#include
using
namespace std;
/*9 3 5 5
1 35 3
4 33 7
3 7//求每頭牛的身高的最大可能值是多少。
5 5 5 5 5 5 5 5 5
5 4 5 5 5 5 5 5 5
5 4 5 4 5 5 5 5 5
5 4 5 3 4 4 5 5 5
// 轉化成[a, b] -= 1;
*/const
int n =
10005
;int d[n]
, n, p, h, m, a, b;
intmain()
mp[make_pair
(a,b)]=
true
; d[a +1]
-=1;
d[b]+=
1;}//進行還原a陣列
for(
int i =
1; i <= n; i++
)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 ...
字首和與差分
從陣列第乙個開始累加 s i s i 1 a i 求區間 l,r 的和,o 1 複雜度sum s r s l 1 遞推s i j s i j s i 1 j s i j 1 s i 1 j 1 例題 雷射炸彈一種新型的雷射炸彈,可以摧毀乙個邊長為r的正方形內的所有的目標。現在地圖上有n n 1000...
字首和與差分
include using namespace std const int n 1010 int a n n sum n n intmain int x1,y1,x2,y2 while q return0 差分就是資料間的差。是原始陣列的相鄰元素之間的差值,有b i a i 1 a i includ...