定義字首陣列s[ ]
一維情況下:s[i]=a[1]+a[2]+…+a[i]
二維情況下:s[i][j]=以i,j為邊界,左上方矩形內數的和
作用:對區間中數的和進行快速訪問
字首和
#include
using
namespace std;
const
int n =
1e5+10;
int x[n]
, s[n]
;int
main()
while
(m--
)system
("pause");
return0;
}
子矩陣的和
#include
using
namespace std;
const
int n =
1010
;int x[n]
[n], s[n]
[n];
intmain()
return0;
}
定義差分陣列b
在一維情況下:a[i]=b[1]+b[2]+…+b[i]
即是令b[1]=a[1],b[2]=a[2]-a[1]…
在二維情況下:差分陣列的字首和等於原陣列
作用:對乙個區間快速加減乙個數
#include
using
namespace std;
const
int n =
100010
;int m, n;
int a[n]
, b[n]
;void
insert
(int l,
int r,
int c)
;int
main()
while
(m--
)for
(int i =
1; i <= n; i++
)system
("pause");
return0;
}void
insert
(int l,
int r,
int c)
#include
using
namespace std;
const
int n =
1010
;int m, n, q;
int a[n]
[n], b[n]
[n];
void
insert
(int x1,
int y1,
int x2,
int y2,
int c)
;int
main()
while
(q--
)for
(int i =
1; i <= n; i++
)printf
("\n");
}system
("pause");
return0;
}void
insert
(int x1,
int y1,
int x2,
int y2,
int c)
字首和與差分
數列的字首和 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 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 i...