Submission 139

Return to Problem

User: 67

Language: cpp

Submitted at: Nov. 8, 2025, 3:28 p.m.

Elapsed Time: 167.57 s

Keys per Minute (KPM): Unknown

Status: AC

Test Case Results:

# Status Time (s) Error
1 AC 1.038 -
2 AC 1.038 -
3 AC 1.05 -
4 AC 1.036 -
5 AC 1.038 -
#include <bits/stdc++.h>
using namespace std;

#define int long long

int nodes[400005];
int lazy[400005];

void clean(int n, int l, int r) {
    nodes[n] += lazy[n] * (r - l + 1);
    if (l != r) {
        lazy[2*n] += lazy[n];
        lazy[2*n+1] += lazy[n];
    }
    lazy[n] = 0;
}

void upd(int n, int l, int r, int ql, int qr, int x) {
    clean(n, l, r);
    if (l > qr or r < ql) return;
    if (ql <= l and r <= qr) {
        lazy[n] += x;
        clean(n, l, r);
        return;
    }
    int mid = (l+r)/2;
    upd(2*n, l, mid, ql, qr, x);
    upd(2*n+1, mid+1, r, ql, qr, x);
    nodes[n] = nodes[2*n] + nodes[2*n+1];
}

int query(int n, int l, int r, int ql, int qr) {
    clean(n, l, r);
    if (l > qr or r < ql) return 0;
    if (ql <= l and r <= qr) return nodes[n];
    int mid = (l+r)/2;
    return query(2*n, l, mid, ql, qr) + query(2*n+1, mid+1, r, ql, qr);
}

signed main() {
    int N, M;
    cin >> N >> M;
    for (int i = 1; i <= N; i ++) {
        int t;
        cin >> t;
        upd(1, 1, N, i, i, t);
    }
    for (int i = 1; i <= M; i ++) {
        int a, b, c;
        cin >> a >> b >> c;
        if (a == 1) {
            int d;
            cin >> d;
            upd(1, 1, N, b, c, d);
        } else {
            cout << query(1, 1, N, b, c) << "\n";
        }
    }
}