洛谷p3374 树状数组1 - 单点修改 区间求和

树状数组最基本应用吧

//ios::sync_with_stdio(false); 
#include<bits/stdc++.h> 

using namespace std;
const int MAXN = 500010;
int n,m;
int C[MAXN]; 
int lowbit(int x)
{
	return x&-x;
}
void add(int i,int val)
{
	while(i<=n){
		C[i]+=val;
		i +=lowbit(i);
	}
}
int sum(int i)
{
	int s = 0;
	while(i>0){
		s+=C[i];
		i-=lowbit(i);
	}
	return s;
} 

int main(){
	cin >> n >> m;
	int num1,num2,op;
	for(int i=1;i<=n;++i){
		cin >> num1;
		add(i,num1);
	}
	for(int i=0;i<m;++i){
		cin >> op >> num1 >> num2;
		if(op==1){
			add(num1,num2);
		}
		else{
			cout << sum(num2) - sum(num1-1) <<endl;
		}
	}
	return 0;
}
posted @ 2019-02-17 21:45  新新人類  阅读(149)  评论(0编辑  收藏  举报