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