记录编号 |
286277 |
评测结果 |
AAAAAAAAAAAAAAAA |
题目名称 |
数列操作A |
最终得分 |
100 |
用户昵称 |
Hzoi_ |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.560 s |
提交时间 |
2016-07-30 12:02:53 |
内存使用 |
0.63 MiB |
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=100010,maxm=1010;
void add(int,int);
int query(int,int);
int block,n,m,a[maxn]={0},b[maxm]={0},x,y;
char c[10];
int main(){
#define MINE
#ifdef MINE
freopen("shulie.in","r",stdin);
freopen("shulie.out","w",stdout);
#endif
scanf("%d",&n);
block=(int)sqrt(n);
//printf("%d\n",block);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
b[i/block]+=a[i];
}
scanf("%d",&m);
while(m--){
scanf("%s %d%d",c,&x,&y);
if((*c)=='A')add(x-1,y);
else printf("%d\n",query(x-1,y-1));
}
return 0;
}
void add(int p,int x){
a[p]+=x;
b[p/block]+=x;
}
int query(int l,int r){
int ans=0;
if(r-l+1<block){
while(l<=r)ans+=a[l++];
return ans;
}
while(l%block)ans+=a[l++];
while((r+1)%block)ans+=a[r--];
while(l<r){
ans+=b[l/block];
l+=block;
}
return ans;
}
//A block: 0..block-1,block..2*block-1