比赛 |
测试 |
评测结果 |
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;
}