比赛 测试 评测结果 AAAAAAAAAAAAAAA
题目名称 数列操作A 最终得分 100
用户昵称 FFF团 运行时间 0.479 s
代码语言 C++ 内存使用 32.94 MiB
提交时间 2017-04-11 18:41:22
显示代码纯文本
#include<cstdio>
using namespace std;
const int maxn=2140000; 
char s[3];


struct tree
{
	int l,r,sum;
}a[maxn];


int c[maxn];
int summ;


int built(int k,int l,int r)
{
	a[k].l=l;
	a[k].r=r;
	if(l==r) a[k].sum=c[l];
	else
	{
		built(2*k,l,(l+r)/2);
		built(2*k+1,(l+r)/2+1,r);
		a[k].sum=a[2*k].sum+a[2*k+1].sum; 	
	}
}


int add(int k,int pos,int num)
{
	if(a[k].l==a[k].r) a[k].sum+=num;
	else
	{
		if(pos<=(a[k].l+a[k].r)/2) add(2*k,pos,num);
		if(pos>(a[k].l+a[k].r)/2) add(2*k+1,pos,num);
		a[k].sum=a[2*k].sum+a[2*k+1].sum; 
	} 
} 


int query(int k,int l,int r)
{
	if(l<=a[k].l&&a[k].r<=r)
	{
		summ+=a[k].sum;
	}
	else
	{
		if(l<=(a[k].l+a[k].r)/2) query(2*k,l,r);
		if(r>(a[k].l+a[k].r)/2) query(2*k+1,l,r);
	}
}


int n,m,p,x,y;


int main()
{
	freopen("shulie.in","r",stdin);
	freopen("shulie.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&c[i]);
	built(1,1,n);
	scanf("%d",&m);
	for(int i=1;i<=m;i++)
	{
		scanf("%s%d%d",s,&x,&y);
		if((s[0]=='A')&&(s[1]=='D')&&(s[2]=='D')) add(1,x,y);
		if((s[0]=='S')&&(s[1]=='U')&&(s[2]=='M')) 
		{
			summ=0;
			query(1,x,y);
			printf("%d\n",summ);
		} 
	} 
	fclose(stdin);
	fclose(stdout);
	return 0;
}