树状数组模板

int lowbit(int x){
    return x & -x;
}

struct fenwick{
   int n;
   vector<int> tr;
   fenwick(int n_){
		init(n_);
   }
   void init(int n_){
   		tr.resize(n_+10,0);
   		n=n_;
   }
   void add(int x,int c){
	    for(int i=x;i<=n;i+=lowbit(i)) tr[i]+=c;
   }
   
   void add(int l,int r,int c){
	    for(int i=l;i<=n;i+=lowbit(i)) tr[i]+=c;
	    for(int i=r+1;i<=n;i+=lowbit(i)) tr[i]-=c;
   }
   
   int sum(int x){
	    int res=0;
	    for(int i=x;i>=1;i-=lowbit(i)) res+=tr[i];
	    return res;
   }
   
   int sum(int l,int r){
   	 if(l>r) return 0;
   	 return sum(r)-sum(l-1);
   }
};
posted @ 2024-07-17 15:21  MENDAXZ  阅读(52)  评论(0)    收藏  举报