本文共 664 字,大约阅读时间需要 2 分钟。
今天学习了树状数组
前一段时间没有认真看别人的讲解, 所以一直觉得很难, 今天仔细学了学,发现好像没那么难呢!习题抽空做 !
想学习树状数组的同学可以在洛谷此题的第一篇题解上学习,非常容易理解()
#include#include using namespace std;int n,m,a,w,x,y;int tree[5000010]; int lowbit(int x) //去掉从右往左数第一个1{ return x&-x;}void add(int i,int k) //单点修改{ while(i<=n) { tree[i]+=k; i+=lowbit(i); }}int sum(int x) //区间求和{ int ans=0; while(x!=0) { ans+=tree[x]; x-=lowbit(x); } return ans;}int main(){ cin>>n>>m; for(int i=1; i<=n; i++) { scanf("%d",&a); add(i,a); } for(int i=1; i<=m; i++) { scanf("%d%d%d",&w,&x,&y); if(w==1) add(x,y); else if(w==2) cout< <
转载地址:http://fnle.baihongyu.com/