记录编号 286277 评测结果 AAAAAAAAAAAAAAAA
题目名称 数列操作A 最终得分 100
用户昵称 GravatarHzoi_ 是否通过 通过
代码语言 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