记录编号 |
445254 |
评测结果 |
EEEEEEEEEEEEEEE |
题目名称 |
数列操作B |
最终得分 |
0 |
用户昵称 |
swttc |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
1.239 s |
提交时间 |
2017-09-05 17:16:14 |
内存使用 |
7.18 MiB |
显示代码纯文本
- #include<iostream>
- #include<cstdio>
- #include<cmath>
- #include<queue>
- #define mid (l+r)/2
- #define ls o*2
- #define rs o*2+1
-
- using namespace std;
-
- long long n,m,sum[400000],a[100010],lazy[400000];
-
- void buildt(long long l,long long r,long long o)
- {
- if(l==r)
- {
- sum[o]=a[l];
- return;
- }//
- buildt(l,mid,ls);
- buildt(mid+1,r,rs);
- sum[o]=sum[ls]+sum[rs];
- return;
- }
-
- void pushdown(long long l,long long r,long long o)
- {
- if(l==r) return;
- lazy[ls]+=lazy[o];
- lazy[rs]+=lazy[o];
- sum[ls]+=lazy[o]*(mid-l+1);
- sum[rs]+=lazy[o]*(r-mid);
- lazy[o]=0;
- return;
- }
-
- void add(long long l,long long r,long long o,long long ll,long long rr,long long x)
- {
-
- if(l>=ll&&r<=rr)
- {
- lazy[o]+=x;
- sum[o]+=(r-l+1)*x;//cout<<lazy[o]<<" "<<o<<endl;
- return;
- }
- pushdown(l,r,o);
- if(mid>=ll)
- {
- add(l,mid,ls,ll,rr,x);
- }
- if(mid<rr)
- {
- add(mid+1,r,rs,ll,rr,x);
- }
- sum[o]=sum[ls]+sum[rs];
- return;
- }
-
- long long query(long long l,long long r,long long o,long long ll,long long rr)
- {//cout<<lazy[o]<<" "<<o<<endl;
- long long t=0;
- if(l>=ll&&r<=rr)
- {
- return sum[o];
- }
- pushdown(l,r,o);
- if(mid>=ll)
- {
- t+=query(l,mid,ls,ll,rr);
- }
- if(mid<rr)
- {
- t+=query(mid+1,r,rs,ll,rr);
- }
- return t;
- }
-
- int main()
- {
- //cout<<(sizeof(sum)+sizeof(a)+sizeof(lazy))/1024/1024;
- freopen("shuliec.in","r",stdin);
- freopen("shuliec.out","w",stdout);
- scanf("%lld",&n);
- for(long long i=1;i<=n;i++)
- {
- scanf("%lld",&a[i]);
- }
- buildt(1,n,1);
- scanf("%lld",&m);
- for(long long i=1;i<=m;i++)
- {
- string s;
- cin>>s;
- if(s[0]=='A')
- {
- long long w,y,q;
- scanf("%lld%lld%lld",&w,&y,&q);
- add(1,n,1,w,y,q);
- //update(1,n,1,w,y);
- }
- else
- {
- long long y,q;
- scanf("%lld%lld",&y,&q);
- printf("%lld\n",query(1,n,1,y,q));
- }
- }
- return 0;
- }