#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
#define all(x) x.begin(), x.end()
#define len(x) (int)(x).size()
using pii = pair<int, int>;
template <typename T, typename T2>
ostream &operator<<(ostream &o, const pair<T, T2> &p);
template <typename T>
ostream &operator<<(ostream &o, const vector<T> &v);
template <typename T, typename T2>
ostream &operator<<(ostream &o, const pair<T, T2> &p)
{
    return o << "(" << p.x << "," << p.y << ")";
}
template <typename T>
ostream &operator<<(ostream &o, const vector<T> &t)
{
    o << "[";
    for (int i{}; auto u : t)
        o << (i++ ? "," : "") << u;
    return o << "]";
}
int nxt()
{
    int x;
    cin >> x;
    return x;
}
int n, q;
vector<pii> segments;
const int BASE = 1 << 19;
int query(int a, int b, int c, int d)
{
    int power_uses = 0;
    int height = b;
    // cout << vector({a, b, c, d}) << "\n";
    vector<pii> path;
    for (int i = a - 1; i >= c; i--)
    {
        path.push_back(segments[i]);
    }
    for (int i = a; i < c; i++)
    {
        path.push_back(segments[i]);
    }
    path.push_back({d, d + 1});
    // cout << path << "\n";
    for (auto [x, y] : path)
    {
        height = max(height, x);
        if(height >= y)
        {
            power_uses += height - y + 1;
            // cout << x << " " << y << " " << height - y + 1 << " obnizanie\n";
            height = y - 1;
        }
        height += 1;
    }
    return power_uses;
}
void update(int p, int s, int e) // update semgent
{
    segments[p] = {s, e};
}
int main()
{
    // ios::sync_with_stdio(0), cin.tie(0);
    n = nxt(), q = nxt();
    segments.push_back({0, 0});
    for (int i = 0; i < n - 1; i++)
        segments.push_back({nxt(), nxt()});
    for (int i = 0; i < q; i++)
    {
        if (nxt() == 1)
        {
            int p = nxt(),
                s = nxt(),
                e = nxt();
            update(p, s, e);
        }
        else
        {
            int a = nxt(),
                b = nxt(),
                c = nxt(),
                d = nxt();
            cout << query(a, b, c, d) << "\n";
        }
    }
}
/*
3 3
0 5
0 5
2 1 3 3 3
1 2 0 1
2 1 3 3 3
*/
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |