區間樹狀數組
阿新 • • 發佈:2017-08-14
const gets ear array 樹狀數組 style logs pos max
先放代碼,後面放講解
const long long MAXN=500233; class TreeLikeArray { public: long long c1[MAXN]; long long c2[MAXN]; void add(long long array[],int pos,int key) { while(pos<MAXN) { array[pos]+=key; pos+=pos&(-pos); } } longlong getSum(long long array[],int pos) { long long ret=0; while(pos>0) { ret+=array[pos]; pos-=pos&(-pos); }return ret; } long long getSum(int pos) { return pos*getSum(c1,pos)-getSum(c2,pos); } long longgetSum(int pos1,int pos2) { return getSum(pos2)-getSum(pos1-1); } void add(int pos,long long target) { add(c1,pos,target); add(c1,pos+1,-target); add(c2,pos,target*(pos-1)); add(c2,pos+1,-target*pos); } void add(int pos1,int pos2,longlong target) { add(c1,pos1,target); add(c1,pos2+1,-target); add(c2,pos1,target*(pos1-1)); add(c2,pos2+1,-target*(pos2)); } }; TreeLikeArray TLA;
區間樹狀數組