记录编号 492163 评测结果 AAAAAAAAAAAAAAA
题目名称 数列操作A 最终得分 100
用户昵称 GravatarCeres 是否通过 通过
代码语言 C++ 运行时间 2.495 s
提交时间 2018-03-23 20:00:48 内存使用 1.77 MiB
显示代码纯文本
#include <cstdio>
#include <string>
#define max 100010
using namespace std;
int n=0,m=0,A[max]={0},k=0,d=0,s=0,t=0;
struct node
{
	int sum;
}tree[4*max];
int build(int rt,int l,int r)
{
	if(l==r)
		tree[rt].sum=A[l];
	else
	{
		int mid=(l+r)>>1;
		tree[rt].sum+=build(rt<<1,l,mid);
		tree[rt].sum+=build(rt<<1|1,mid+1,r);
	}
	return tree[rt].sum;
}
void add(int rt,int l,int r)
{
	tree[rt].sum+=d;
	if(l==r)
		return;
	int mid=(l+r)>>1;
	if(mid>=k)
		add(rt<<1,l,mid);
	else
		add(rt<<1|1,mid+1,r);
}
int ask(int rt,int l,int r)
{
	if(s>r || l>t)
		return 0;
	if(s<=l && r<=t)
		return tree[rt].sum;
	int mid=(l+r)>>1,ans=0;
	ans+=ask(rt<<1,l,mid)+ask(rt<<1|1,mid+1,r);
	return ans;
}
int main()
{
	freopen("shulie.in","r",stdin);
	freopen("shulie.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&A[i]);
	scanf("%d",&m);
	tree[1].sum=build(1,1,n);
	while(m--)
	{
		string a;
		a.resize(3);
		scanf("%s",&a[0]);
		if(a=="ADD")
		{
			scanf("%d%d",&k,&d);
			add(1,1,n);
		}
		else
		{
			scanf("%d%d",&s,&t);
			int ans=ask(1,1,n);
			printf("%d\n",ans);
		}
	}
	return 0;
}