Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<algorithm>
- #define int long long
- using namespace std;
- const int maxn=1e6+5;
- int a[maxn],seg[4*maxn],tag[4*maxn];
- void mod(int l,int r,int p,int ql,int qr,int v){
- if(r<ql||qr<l)return;
- if(ql<=l&&r<=qr){
- seg[p]+=(r-l+1)*v;
- tag[p]+=v;
- return;
- }
- int mid=l+r>>1;
- mod(l,mid,p<<1,ql,qr,v);
- mod(mid+1,r,p<<1|1,ql,qr,v);
- seg[p]=seg[p<<1]+seg[p<<1|1];
- }
- int query(int l,int r,int p,int ql,int qr,int tags){
- if(r<ql||qr<l)return 0;
- if(ql<=l&&r<=qr){
- return tags*(r-l+1)+seg[p];
- }
- int mid=l+r>>1;
- return query(l,mid,p<<1,ql,qr,tags+tag[p])+query(mid+1,r,p<<1|1,ql,qr,tags+tag[p]);
- }
- signed main(){
- int n,q,l,r,k;
- char cmd;
- cin>>n>>q;
- for(int i=1;i<=n;i++)cin>>a[i],mod(1,n,1,i,i,a[i]);
- for(int i=0;i<q;i++){
- cin>>cmd>>l>>r;
- if(cmd=='q')cout<<query(1,n,1,l,r,0)<<"\n";
- else{
- cin>>k;
- mod(1,n,1,l,r,k);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement