树状数组模板

template <typename T>
struct fenwick {
   int n;
   vector<T> a;
   inline void init(int _n) {//初始化tree的大小 
      a.assign(n = _n, 0);
   } 
   fenwick() {}
   fenwick(int n) : n(n), a(n) {}
   void add(int x, T v) {
//   	  x++;如果有0的话,那么就需要转化区间 
      for(int i=x;i<=n;i+=lowbit(i)) a[i]+=v;
   }
   T sum(int x) {
	    T res=0;
//	    x++;
	    for(int i=x;i>=1;i-=lowbit(i)) res+=a[i];
	    return res;
   }
   T sum(int l, int r) {
        if (l > r) return 0;
      return sum(r) - sum(l - 1);
   }
};
fenwick<int> tr[21];
posted @ 2024-07-17 15:21  MENDAXZ  阅读(4)  评论(0编辑  收藏  举报