Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //do array [set_segm, get_segm]
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- vector<ll> a;
- vector<bool> all;
- void push(int v, int l, int r){
- all[v*2 + 1] = true;
- all[v*2 + 2] = true;
- ll y = a[v] / (r-l);
- int m = (r+l)/2;
- a[2*v+1] = y* (m - l);
- a[2*v+2] = y* (r - m);
- }
- void setx(int v, int l, int r, int lr, int rr, ll y){
- if(r <= lr || rr <= l)
- return;
- if(lr <= l && r <= rr){
- all[v] = true;
- a[v] = (r - l) * y;
- return;
- }
- if(all[v])
- push(v, l, r);
- all[v] = false;
- int m = (r+l)/2;
- setx(v*2 +1, l, m, lr, rr, y);
- setx(v*2 +2, m, r, lr, rr, y);
- a[v] = a[v*2 + 1] + a[v*2 + 2];
- }
- ll get(int v, int l, int r, int lr, int rr){
- if(r <= lr || rr <= l)
- return 0;
- if(lr <= l && r <= rr)
- return a[v];
- if(all[v])
- push(v, l, r);
- int m = (r+l)/2;
- return get(v*2+1, l, m, lr, rr) + get(v*2+2, m, r, lr, rr);
- }
- int main() {
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- int n, m, t, l, r, v;
- cin >> n >> m;
- a.resize(4*n, 0);
- all.resize(4*n, true);
- while(m--){
- cin >> t >> l >> r;
- if(t == 1){
- cin >> v;
- setx(0, 0, n, l, r, v);
- } else{
- cout << get(0, 0, n, l, r) << endl;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement