记录编号 |
259682 |
评测结果 |
AAAAAAAAAAAAAAAA |
题目名称 |
数列操作A |
最终得分 |
100 |
用户昵称 |
Sky_miner |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.173 s |
提交时间 |
2016-05-11 08:04:04 |
内存使用 |
1.82 MiB |
显示代码纯文本
#include<cstdio>
using namespace std;
const int maxn = 100000 + 10 ;
int T[maxn<<2],M;
inline void read(int &x){
x=0;char ch;
while(ch=getchar(),ch<'!');
while(x=10*x+ch-'0',ch=getchar(),ch>'!');
}
void Build(int n){
for(M=1;M<=n+1;M<<=1);
for(int i=M+1;i<=n+M;++i){
read(T[i]);
}
for(int i=M-1;i>0;--i){
T[i] = T[i<<1] + T[i<<1|1];
}
}
void add(int id,int val){
for(T[id+=M]+=val,id>>=1;id;id>>=1)
T[id] = T[id<<1] + T[id<<1|1];
}
void change(int id,int val){
for(T[id+=M]=val,id>>=1;id;id>>=1)
T[id] = T[id<<1] + T[id<<1|1];
}
int Query(int s,int t){
int ret = 0;
for(s=s+M-1,t=t+M+1;s^t^1;s>>=1,t>>=1){
if(~s & 1 ) ret += T[s^1];
if( t & 1 ) ret += T[t^1];
}
return ret;
}
int main(){
freopen("shulie.in","r",stdin);
freopen("shulie.out","w",stdout);
int n;read(n);
Build(n);
char ch[2];int s,t;
int T;read(T);
while(T--){
scanf("%s",ch);
if( *ch == 'S' || *ch == 'Q'){
read(s),read(t);
printf("%d\n",Query(s,t));
}else if( *ch == 'A' ){
read(s),read(t);
add(s,t);
}else if( *ch == 'C'){
read(s),read(t);
change(s,t);
}
}
}