求助,树状数组 40分
查看原帖
求助,树状数组 40分
477368
Jerry6B楼主2021/9/5 21:52
#include<bits/stdc++.h>
#define ll long long
#define in inline
#define reint register int
using namespace std;
int n,m,c[400100]; 
in int lowbit(int k){return k&(-k);}
in int read(){int h=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')h=h*10+ch-'0',ch=getchar();return h*f;}
in void add(int x,int d){
	for(reint i=x;i<=n;i+=lowbit(i))c[i]+=d;
}
ll ask(int x){
	ll h=0;
	for(reint i=x;i;i-=lowbit(i))h+=c[i];
	return h;
}
int main(){
	n=read();
	m=read();
	for(reint i=1,x;i<=m;i++){
		x=read();
		add(i,x);
	}
	for(reint i=1;i<=m;i++){
		int x,y,t;
		t=read(),x=read(),y=read();
		if(t==1)add(x,y);
		else{
			if(x>y)swap(x,y);
			cout<<ask(y)-ask(x-1)<<endl;
		}
	}
	return 0;
}
2021/9/5 21:52
加载中...