其实树状数组就是一个简单的离散化
主要思想就是活用lowbit
lowbit是什么?就是一个数二进制最低位1和后面的0表示的数值
因为每一个数都可以用几个二进制来表示
所以用树状数组可以方便的存储数据
再加上较好理解的区块查询和更新
建议如果没有数学知识的纯板子区间和,区间更新的题都可以用树状数组!
#includeusing namespace std; const int M=10000000; int c[M],n,m; int lowbit(int x){ return x&(-x); } void add(int x,int k){ for(;x<=n;x+=lowbit(x)) c[x]+=k; } int ask(int x){ int ans=0; for(;x;x-=lowbit(x))ans+=c[x]; return ans; } int query(int l,int r){ return ask(r)-ask(l-1); } int main(){ cin>>n>>m; for(int i=1;i<=n;i++){ int a; cin>>a; add(i,a); } for(int i=1;i<=m;i++){ int a,b,c; cin>>a; if(a==1){ cin>>b>>c; add(b,c); } if(a==2){ cin>>b>>c; cout< 欢迎分享,转载请注明来源:内存溢出
评论列表(0条)