数据结构ex

差分->前缀和的逆运算

b[i]是a[i]-a[i-1]. 如果要对某一区间i-j进行加减操作,直接b[i]+x b[j+1]-x就行,在O(1)内完成操作,输出a数组时,a[i] = $\sum b[1…i]$

分块

把序列分成$\sqrt n$块,每一个元素所在的块为(x-1)/size + 1;
然后可以进行操作,注意在判断在于最后一块的元素的时候要min(n,算出来的元素位置); 也可以记录下每一次查询,若查询次数大于一个数($\sqrt n$)时,暴力重构一下。