记录编号 |
228936 |
评测结果 |
AAAAAAAAAAAAAAAA |
题目名称 |
数列操作A |
最终得分 |
100 |
用户昵称 |
SOBER GOOD BOY |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.905 s |
提交时间 |
2016-02-19 20:58:31 |
内存使用 |
7.10 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<cctype>
#define lson rt<<1,l,mid
#define rson rt<<1|1,mid+1,r
using namespace std;
const long long maxn=100000;
long long Read();
struct Node
{
long long sum,l,r;
}a[maxn*4]={0};
void Init();
void Insert(long long x,long long y,long long rt,long long l,long long r);
long long Qery(long long ,long long ,long long );
void Insert(long long,long long,long long);
void Build(long long,long long,long long);
int main()
{
freopen("shulie.in","r",stdin);
freopen("shulie.out","w",stdout);
Init();
return 0;
}
void Init()
{
long long n=Read();
if(n==0){
return ;
}
Build(1,1,n);
long long m;
scanf("%lld",&m);
for(int i=1;i<=m;i++)
{
char s1[6];
long long s,t;
scanf("%s%lld%lld",s1,&s,&t);
if(s1[0]=='S')
{long long k=Qery(s,t,1);
printf("%lld\n",k);}
if(s1[0]=='A')
{
Insert(s,t,1,1,n);
}
}
}
void Insert(long long x,long long y,long long rt,long long l,long long r)
{
if(l==r)
{
a[rt].sum+=y;
return;
}
long long mid=(l+r)>>1;
if(x<=mid) Insert(x,y,lson);
else Insert(x,y,rson);
a[rt].sum=a[rt<<1].sum+a[rt<<1|1].sum;
}
void Build(long long rt,long long l,long long r)
{
a[rt].l=l;
a[rt].r=r;
if(a[rt].l==a[rt].r)
{
scanf("%lld",&a[rt].sum);
return;
}
long long mid=(l+r)>>1;
Build(rt<<1,l,mid);
Build(rt<<1|1,mid+1,r);
a[rt].sum=a[rt<<1].sum+a[rt<<1|1].sum;
}
long long Qery(long long s,long long t,long long rt)
{
long long l=a[rt].l,r=a[rt].r;
if(s<=l&&t>=r)return a[rt].sum;
long long mid=(l+r)>>1;
if(t<=mid) return Qery(s,t,rt<<1);
if(s>mid)return Qery(s,t,rt<<1|1);
return (Qery(s,t,rt<<1)+Qery(s,t,rt<<1|1));
}
long long Read()
{
char ch;
while(ch=getchar(),!isdigit(ch));
long long x=ch-48;
while(ch=getchar(),isdigit(ch)) x=x*10+ch-48;
return x;
}