树状数组

#include<cstdio> #include<iostream> #include<algorithm> using namespace std; int total[500005]; int n,m; int lowbit(int x) { return(~x+1)&x; } void add(int i,int x) { while(i<=n) { total[i] += x; i+=lowbit(i); } } int sum(int x) { int ans=0; while(x!=0) { ans+=total[x]; x-=lowbit(x); } return ans; } int main(void) { cin >> n >> m; for(int i = 1;i<=n;i++) { int x; cin >> x; add(i,x); } while(m--) { int a; cin >> a; if(a == 1) { int x,y; cin >> x >> y; add(x,y); } if(a == 2) { int x,y; cin >> x >> y; int ans = sum(y) - sum(x-1); cout << ans << endl; } } return 0; }
计算机小白记录学习过程,喜欢就点个推荐和关注吧O(∩_∩)O哈哈~

浙公网安备 33010602011771号