제출 #1170937

#제출 시각아이디문제언어결과실행 시간메모리
1170937RoupiqBitaro, who Leaps through Time (JOI19_timeleap)C++20
4 / 100
3092 ms17096 KiB
#include <bits/stdc++.h>
using namespace std;

#define x first
#define y second
#define all(x) x.begin(), x.end()
#define len(x) (long)(x).size()
using pii = pair<long, long>;

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 (long i{}; auto u : t)
        o << (i++ ? "," : "") << u;
    return o << "]";
}

long nxt()
{
    long x;
    cin >> x;
    return x;
}

long n, q;
vector<pii> segments;

long query(long a, long b, long c, long d)
{
    long power_uses = 0;
    long height = b;
    // cout << vector({a, b, c, d}) << "\n";
    vector<pii> path;
    for (long i = a - 1; i >= c; i--)
    {
        path.push_back(segments[i]);
    }
    for (long 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(long p, long s, long 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 (long i = 0; i < n - 1; i++)
        segments.push_back({nxt(), nxt()});

    for (long i = 0; i < q; i++)
    {
        if (nxt() == 1)
        {
            long p = nxt(),
                s = nxt(),
                e = nxt();
            update(p, s, e);
        }
        else
        {
            long 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

5 5
3 5
4 8
2 6
5 10
2 5 3 1 10
2 2 6 5 6
1 3 4 6
2 3 3 4 3
2 4 5 1 5
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...