Submission 117

Return to Problem

User: admin

Language: cpp

Submitted at: Nov. 8, 2025, 1:53 p.m.

Elapsed Time: 284.94 s

Keys per Minute (KPM): Unknown

Status: AC

Test Case Results:

# Status Time (s) Error
1 AC 0.915 -
2 AC 0.913 -
3 AC 0.937 -
4 AC 0.925 -
5 AC 0.926 -
#include <bits/stdc++.h>
using namespace std;
#define int long long

int a[100005],sum[400005],tag[400005];

void pushup(int p){sum[p]=sum[p*2]+sum[p*2+1];}
void maketag(int l,int r,int p,int num){
    tag[p]+=num;
    sum[p]+=num*(r-l+1);
}
void pushdown(int l,int r,int p){
    int mid=(l+r)/2;
    maketag(l,mid,p*2,tag[p]);
    maketag(1+mid,r,p*2+1,tag[p]);
    tag[p]=0;
}
void build(int l,int r,int p=1){
    if (l==r) {
        sum[p]=a[l];
        return;
    }
    int mid=(l+r)/2;
    build(l,mid,p*2);
    build(1+mid,r,p*2+1);
    pushup(p);
}
void add(int L,int R,int num,int l,int r,int p=1){
    if (l>R||L>r) return;
    if (L<=l&&r<=R) maketag(l,r,p,num);
    else{
        int mid=(l+r)/2;
        pushdown(l,r,p);
        add(L,R,num,l,mid,p*2);
        add(L,R,num,mid+1,r,p*2+1);
        pushup(p);
    }
}
int query(int L,int R,int l,int r,int p=1){
    if (l>R||L>r) return 0;
    if (L<=l&&r<=R) return sum[p];
    else{
        int mid=(l+r)/2;
        pushdown(l,r,p);
        return query(L,R,l,mid,p*2)+query(L,R,mid+1,r,p*2+1);
        // add(L,R,num,l,mid,p*2);
        // add(L,R,num,mid+1,r,p*2+1);
        // pushup(p);
    }
}
signed main(){
    int n,q;
    cin>>n>>q;
    for (int i=1;i<=n;i++) cin>>a[i];
    build(1,n);
    while (q--){
        int op,x,y,k;
        cin>>op>>x>>y;
        if (op==1){
            cin>>k;
            add(x,y,k,1,n);
        }
        else cout<<query(x,y,1,n)<<endl;
    }
}