关于树状数组的O(n)初始化
  • 板块学术版
  • 楼主Inv_day_in_R
  • 当前回复6
  • 已保存回复8
  • 发布时间2025/1/19 21:15
  • 上次更新2025/1/20 09:30:26
查看原帖
关于树状数组的O(n)初始化
774202
Inv_day_in_R楼主2025/1/19 21:15

支持区间加区间和的那种。

码风抽象,见谅

template<typename T>struct fenwick{//一个可以区间修改区间查询的下标0~n-1的树状数组模板
private:
    vector<array<T,2>>tr;
    void _add(int x,T c,int t){for(;x<tr.size();x+=x&-x)tr[x][t]+=c;}
    void __add(int x,T c){_add(x,c,0),_add(x,x*c,1);}
    int _sum(int x,int t){int r=0;for(;x;x-=x&-x)r+=tr[x][t];return r;}
    int __sum(int x){return (x+1)*_sum(x,0)-_sum(x,1);}
public:
    fenwick(int n){tr.resize(n+1);}
    void add(int l,int r,T c){__add(l+1,c),__add(r+2,-c);}
    int sum(int l,int r){return __sum(r+1)-__sum(l);}
};
2025/1/19 21:15
加载中...