Submission 359
Return to ProblemUser: 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';
}
}
}