记录编号 543677 评测结果 AAAAAAAAAAAAAAA
题目名称 数列操作A 最终得分 100
用户昵称 Gravatar乐未殇 是否通过 通过
代码语言 C++ 运行时间 1.331 s
提交时间 2019-10-08 11:57:04 内存使用 21.67 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <string.h>
using namespace std;
int n,m;
int t[100005]={0};
struct node{
int l,r;
long long sum;
}tree[500001];
void build(int root,int l,int r){
	tree[root].sum=t[r]-t[l-1];
	tree[root].l=l;
	tree[root].r=r;
	if(l==r){
	return;
	}
	int mid=(l+r)/2;
	build(root*2,l,mid);
	build(root*2+1,mid+1,r);
}	
int ask(int root,int l,int r){
	if(tree[root].l==l&& tree[root].r==r){
	return tree[root].sum;
	}
	int mid=(tree[root].l+tree[root].r)/2;	
	if(r<=mid){
	return ask(root*2,l,r);
	}
	if(l>mid){
	return ask(root*2+1,l,r);
	}
	return ask(root*2,l,mid)+ask(root*2+1,mid+1,r);
}
void add(int root,int x,int y){
	tree[root].sum+=y;
	if(tree[root].l==tree[root].r){
	return;
    }
    int mid=(tree[root].l+tree[root].r)/2;
	if(x<=mid){
	add(root*2,x,y);
	}
	if(x>mid){
	add(root*2+1,x,y);
	}
}
int main(){
	freopen("shulie.in","r",stdin);
	freopen("shulie.out","w",stdout);
	int x,y;
	char p[5];
	scanf("%d",&n);
	t[0]=0;
	for(int a=1;a<=n;++a){
	scanf("%d",&x);
	t[a]=t[a-1]+x;
	}
	build(1,1,n);
	scanf("%d",&m);
	for(int a=1;a<=m;++a){
	scanf("%s%d%d",&p,&x,&y);
	if(p[0]=='S'){
	printf("%d\n",ask(1,x,y));
	}
	else{
	add(1,x,y);
	}
	}
	return 0;
}