记录编号 534325 评测结果 AAAAAAAAAAAAAAA
题目名称 数列操作A 最终得分 100
用户昵称 Gravatar李宴彬 是否通过 通过
代码语言 C++ 运行时间 4.177 s
提交时间 2019-07-02 17:00:44 内存使用 20.15 MiB
显示代码纯文本
#include <bits/stdc++.h> 
using namespace std;
int a[100010];
struct node 
{
	int lc,rc;
	long long  sum;
}f[400010];
int n,m;
void build(int now,int lc,int rc)
{
	f[now].lc=lc;
	f[now].rc=rc;
	f[now].sum=0;
	if (f[now].lc==f[now].rc) {
		return ;
	}
	int mid=(lc+rc)/2;
	build(now*2,lc,mid);
	build(now*2+1,mid+1,rc);
}
void change(int now,int k,int vl)
{
	f[now].sum+=vl;
	if (f[now].lc==f[now].rc) 
	{
		return ;
	}
	int mid=(f[now].lc+f[now].rc)/2;
	if (k<=mid) change(now*2,k,vl);
	if (k>mid) change(now*2+1,k,vl);
}
long long getsum(int now,int x,int y)
{
	if (f[now].lc==x&&f[now].rc==y) return f[now].sum;
	int mid=(f[now].lc+f[now].rc)/2;
	if (y<=mid) return getsum(now*2,x,y);
	if (x>mid) return getsum(now*2+1,x,y);
	return getsum(now*2,x,mid)+getsum(now*2+1,mid+1,y);
}
int main()
{
	freopen("shulie.in","r",stdin);
	freopen("shulie.out","w",stdout);
	cin>>n;	build(1,1,n);
	for (int i=1;i<=n;i++)
	{
		cin>>a[i];
		change(1,i,a[i]);
    }
	int q;
	cin>>q;
	for (int i=1;i<=q;i++)
	{
		string s;
		int x,y;
		cin>>s>>x>>y;
		if (s[0]=='S') cout<<getsum(1,x,y)<<endl;
		else change(1,x,y) ;
	}
	return 0;
}