P3374 【模板】树状数组 1 标准树状数组题解

#include<iostream>
using namespace std;
const int Maxn=500010;
int N,M;
int a[Maxn];
int lowbit(int x)
{
	return x&(-x);
}
void update(int x,int v)
{
	while (x<=N)
	{
		a[x]+=v;
		x=x+lowbit(x);
	}
}
int sum(int x)
{
	int ans=0;
	while(x)
	{
		ans+=a[x];
		x=x-lowbit(x);
	}
	return ans;
}
int rangsum(int l,int r)
{
	return sum(r)-sum(l-1);
}
int main()
{
	cin>>N>>M;
	for (int i=1;i<=N;i++)
	{
		int x;
		cin>>x;
		update(i,x);
	}
	for (int i=1;i<=M;i++)
	{
		int k,x,y;
		cin>>k;
		if (k==1)
		{
			cin>>x>>y;
			update(x,y);
		}else if(k==2)
		{
			cin>>x>>y;
			cout<<rangsum(x,y)<<endl;
		}
	}
}
posted @ 2022-03-01 08:31  心悟&&星际  阅读(20)  评论(0)    收藏  举报