1. 程式人生 > >區間樹狀數組

區間樹狀數組

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); 
        } 
    }
    long
long 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 long
getSum(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,long
long target) { add(c1,pos1,target); add(c1,pos2+1,-target); add(c2,pos1,target*(pos1-1)); add(c2,pos2+1,-target*(pos2)); } }; TreeLikeArray TLA;

區間樹狀數組