阅读背景:

HDU-1166-敌兵布阵(树状数组|线段树-模板题)_随风而行的博客

来源:互联网 

思路:树状数组或线段树 模板题。。。

Code :

//树状数组 
#include<iostream>
using namespace std;

const int MAX_N=50005;
int n,T;
int a[MAX_N],c[MAX_N];

int Lowbit(int x);
void Update(int id,int x);
int Sum(int id);
int main()
{
	ios::sync_with_stdio(false);
	cin>>T;
	for(int t=1;t<=T;++t)
	{
		cin>>n;
		for(int i=1;i<=n;c[i]=0,++i)
			cin>>a[i];
		for(int i=1;i<=n;++i)
			Update(i,a[i]);
		cout<<"Case "<<t<<":"<<endl;
		string str;
		int l,r,x;
		while(cin>>str&&str!="End"){
			if(str=="Add"){
				cin>>l>>x;
				Update(l,x);
			}else	if(str=="Sub"){
				cin>>l>>x;
				Update(l,-x);
			}else	if(str=="Query"){
				cin>>l>>r;
				cout<<Sum(r)-Sum(l-1)<<endl;
			}
		}
	}
	
	return 0;
}

int Lowbit(int x)
{
	return x&(-x);
}

void Update(int id,int x)
{
	while(id<=n){
		c[id]+=x;
		id+=Lowbit(id);
	}
}

int Sum(int id)
{
	int ans=0;
	while(id>0){
		ans+=c[id];
		id-=Lowbit(id);
	}
	return ans;
}//树状数组 
#inclu



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: