1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #include<bits/stdc++.h> using namespace std; using ll = long long; const int N = 3e5+9; ll a[N],td[N],tid[N];ll n,q;
int lowbit(int x){return x&-x;}
void update(int k ,ll x){ for(int i = k;i <= n;i += lowbit(i)) td[i] += x,tid[i] += k * x; }
ll getsum(int k) { ll res = 0; for(int i = k;i > 0;i -= lowbit(i)) res += (k+1) * td[i] - tid[i]; return res; }
int main(){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); cin >> n >> q; for(int i = 1;i <= n;++i) cin >> a[i]; for(int i = 1;i <= n;++i) update(i, a[i]),update(i + 1, -a[i]); while(q--) { int op;cin >> op; if(op == 1) { ll l,r,v;cin >> l >> r >> v; update(l,v),update(r + 1,-v); }else { ll l,r;cin >> l >> r; cout << getsum(r) - getsum(l-1) << '\n'; } } }
|