Submission 139
Return to ProblemUser: 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";
}
}
}