ACM學習記錄 字首和與差分

2021-09-11 22:19:01 字數 717 閱讀 4837

字首和s[i]=a[1]+a[2]+……+a[i];

可以用a[i]=s[i]-s[i-1]來還原;

還有二維的字首和s[i][j] = s[i-1][j] + s[i][j-1] - s[i-1][j-1] + a[i][j];

這個公式可以用容斥原理推得。

對於乙個給定的數列a,它的差分數列b定義為:

b[1]=a[1],b[i]=a[i]-a[i-1] (2<=i<=n);

字首和與差分是一對逆運算。差分操作有助於把原序列上的「區間操作」轉化為差分序列上的「單點操作」,在樹上有著獨特的應用。

例題:incdec sequence(ch0304)

給定乙個長度為 n(n≤10^5 ) 的數列 ,每次可以選擇乙個區間 [l,r],使下標在這個區間內的數都加一或者都減一。

求至少需要多少次操作才能使數列中的所有數都一樣,並求出在保證最少次數的前提下,最終得到的數列可能有多少種。

#includeusing namespace std;

typedef long long ll;

const int maxn = 1e5+10;

ll n;

ll a[maxn];

ll b[maxn];

int main()

else if(b[i]<0)

} }cout

}

字首和與差分

數列的字首和 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...