记录编号 |
440229 |
评测结果 |
AAAAAAAAAAAAAAA |
题目名称 |
数列操作A |
最终得分 |
100 |
用户昵称 |
liuyu |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.991 s |
提交时间 |
2017-08-22 20:31:44 |
内存使用 |
1.46 MiB |
显示代码纯文本
- #include<bits/stdc++.h>
- using namespace std;
-
- int n,m,A[100000+10],sum[200008],s,t,ans;
- char d[10];
-
- void build(int o,int l,int r){
- int lc=o*2,rc=o*2+1;
- int m=l+(r-l)/2;
- if(l==r)sum[o]=A[l];
- else {
- build(lc,l,m),build(rc,m+1,r);
- sum[o]=sum[lc]+sum[rc];
- }
- }
- void sumans(int o,int l,int r){
- int lc=o*2,rc=o*2+1;
- int m=l+(r-l)/2;
- if(s<=l&&t>=r){
- ans+= sum[o];
- return ;
- }
- if(s<=m)sumans(lc,l,m);
- if(t>m)sumans(rc,m+1,r);
-
- }
- void add(int o,int l,int r)
- {
- int lc=o*2,rc=o*2+1;
- int m=l+(r-l)/2;
- if(l==r)sum[o]+=t;
- else{
- if(s<=m)add(lc,l,m);
- if(s>m)add(rc,m+1,r);sum[o]=sum[rc]+sum[lc];
- }
-
- }
- int main()
- {
- freopen("shulie.in","r",stdin);
- freopen("shulie.out","w",stdout);
- scanf("%d",&n);
- for(int i=1;i<=n;i++)scanf("%d",&A[i]);
- scanf("%d",&m);
- build(1,1,n);
-
- while(m--){
- scanf("%s%d%d",d,&s,&t);
- if(d[0]=='S'){
- ans=0;
- sumans(1,1,n);
- printf("%d\n",ans);
- }
- else {
- add(1,1,n);
- }
- }
- return 0;
- }