Submission 359

Return to Problem

User: quollcucumber

Language: cpp

Submitted at: Nov. 9, 2025, 11:58 a.m.

Elapsed Time: 475.66 s

Keys per Minute (KPM): 222.13

Status: AC

Test Case Results:

# Status Time (s) Error
1 AC 1.066 -
2 AC 1.066 -
3 AC 1.131 -
4 AC 1.07 -
5 AC 1.077 -
#include <bits/stdc++.h>
using namespace std;
#define int long long
int seglazy[1600015], segtotal[1600005];
void prop(int node, int l, int r){
    segtotal[node] += (r - l) * seglazy[node];
    seglazy[node * 2] += seglazy[node];
    seglazy[node * 2+1] += seglazy[node];
    seglazy[node] = 0;
}
int query(int left, int right, int pos = 1, int l = 0, int r = 100005){
    prop(pos, l, r);
    if(left <= l && right >= r){
        return segtotal[pos];
    }
    int total = 0;
    int mid = (l + r )/ 2;
    if(left < mid){
        total += query(left, right, pos * 2, l, mid);
    }
    if(right > mid){
        total += query(left, right, pos * 2 + 1, mid, r);
    }
    return total;
}
void update(int left, int right, int val, int pos = 1, int l = 0, int r = 100005){
    prop(pos, l, r);
    if(left <= l && right >= r){
        seglazy[pos] += val;
        return;
    }
    int mid = (l + r )/ 2;
    if(left < mid){
        update(left, right, val, pos * 2, l, mid);
    }
    if(right > mid){
        update(left, right, val, pos * 2 + 1, mid, r);
    }
    prop(pos * 2, l, mid);
    prop(pos * 2 + 1, mid , r);
    segtotal[pos] = segtotal[pos * 2] + segtotal[pos * 2 + 1];
}
signed main(){
    int n, q;
    cin >> n >> q;
    for(int i = 0; i < n ;i++){
        int a;
        cin >> a;
        update(i, i + 1, a);
    }
    for(int i = 0; i < q; i++){
        int a;
        cin >>a ;
        if(a == 1){
            int x, y, k;
            cin >> x >> y >> k;
            update(x -1 , y, k);
        }else{
            int x, y;
            cin >> x >> y;
            cout<<query(x-1, y)<<'\n';
        }
    }
}