#include <bits/stdc++.h>
using namespace std;
#define ll long long
struct vert {
    bool st=0;
    ll a;
    ll b;
    ll c=0;
};
vert sum(vert a, vert b) {
    vert c=a;
    if (a.st) {
        if (b.st) {
            c.b = b.b;
            c.c += max((ll)0, a.b-b.a)+b.c;
        }
        else {
            if (a.b < b.a) {
                c.b = b.a;
            }
            else if (a.b > b.b) {
                c.b = b.b;
                c.c += a.b-b.b;
            }
        }
    }
    else {
        if (b.st) {
            c = b;
            if (b.a < a.a) {
                c.a = a.a;
                c.c += (a.a-b.a);
            }
            else if (b.a > a.b) {
                c.a = a.b;
            }
        }
        else {
            if (a.b <= b.a) {
                c.st = 1;
                c.a = a.b;
                c.b = b.a;
            }
            else if (a.a >= b.b) {
                c.st = 1;
                c.a = a.a;
                c.b = b.b;
                c.c = a.a-b.b;
            }
            else {
                c.a = max(a.a, b.a);
                c.b = min(a.b, b.b);
            }
        }
    }
    return c;
}
vector<vert> d1 ((1<<20), {0, 0, (ll)1e9, 0});
vector<vert> d2 ((1<<20), {0, 0, (ll)1e9, 0});
void init(int n) {
    for (int i = 0; i < n-1; i++) {
        int l, r;
        cin >> l >> r;
        d1[i+(1<<19)] = {0, l-i, r-i-1, 0};
        d2[i+(1<<19)] = {0, l+i, r+i-1, 0};
    }
    for (int i = (1<<19)-1; i > 0; i--) {
        d1[i] = sum(d1[i*2], d1[i*2+1]);
        d2[i] = sum(d2[i*2+1], d2[i*2]);
    }
}
void change(int n) {
    int v, l, r;
    cin >> v >> l >> r;
    v--;
    d1[v+(1<<19)] = {0, l-v, r-v-1, 0};
    d2[v+(1<<19)] = {0, l+v, r+v-1, 0};
    v += 1<<19;
    while (v > 1) {
        v/=2;
        d1[v] = sum(d1[v*2], d1[v*2+1]);
        d2[v] = sum(d2[v*2+1], d2[v*2]);
    }
}
vert calc(int v, int p, int k, int a, int b, vector<vert> &d) {
    //cout << p << ' ' << k << '\n';
    if (a <= p && k <= b) {
        //cout << "x\n";
        //cout << d[v].st << ' ' << d[v].a << ' ' << d[v].b << ' ' << d[v].c << '\n';
        //cout << d[v*2].st << ' ' << d[v*2].a << ' ' << d[v*2].b << ' ' << d[v*2].c << '\n';
        //cout << d[v*2+1].st << ' ' << d[v*2+1].a << ' ' << d[v*2+1].b << ' ' << d[v*2+1].c << '\n';
        return d[v];
    }
    if (b < p || k < a) {
        return {0, 0, (ll)1e9, 0};
    }
    return sum(calc(v*2, p, (p+k)/2, a, b, d), calc(v*2+1, (p+k)/2+1, k, a, b, d));
}
vert calc2(int v, int p, int k, int a, int b, vector<vert> &d) {
    //cout << p << ' ' << k << '\n';
    if (a <= p && k <= b) {
        //cout << "x\n";
        //cout << d[v].st << ' ' << d[v].a << ' ' << d[v].b << ' ' << d[v].c << '\n';
        //cout << d[v*2].st << ' ' << d[v*2].a << ' ' << d[v*2].b << ' ' << d[v*2].c << '\n';
        //cout << d[v*2+1].st << ' ' << d[v*2+1].a << ' ' << d[v*2+1].b << ' ' << d[v*2+1].c << '\n';
        return d[v];
    }
    if (b < p || k < a) {
        return {0, 0, (ll)1e9, 0};
    }
    return sum(calc(v*2+1, (p+k)/2+1, k, a, b, d), calc(v*2, p, (p+k)/2, a, b, d));
}
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n, q;
    cin >> n >> q;
    init(n);
    for (int i = 0; i < q; i++) {
        int t;
        cin >> t;
        if (t == 1) {
            change(n);
        }
        else {
            int a, b, c, d;
            cin >> a >> b >> c >> d;
            a--, c--;
            if (a == c) {
                cout << max(0, b-d) << '\n';
            }
            else if (a < c) {
                vert x = sum({1, b-a, b-a, 0}, calc(1, 0, (1<<19)-1, a, c-1, d1));
                cout << x.c+max((ll)0, (x.b+c)-d) << '\n';
            }
            else {
                vert x = sum({1, b+a-1, b+a-1, 0}, calc2(1, 0, (1<<19)-1, c, a-1, d2));
                //cout << x.a << ' ' << x.b << ' ' << x.c << '\n';
                cout << x.c+max((ll)0, (x.b-c)+1-d) << '\n';
            }
        }
    }
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |