Submission #900267

# Submission time Handle Problem Language Result Execution time Memory
900267 2024-01-08T03:20:29 Z gaga999 Railway Trip 2 (JOI22_ho_t4) C++17
100 / 100
392 ms 47440 KB
#include <cstdio>
#include <stdio.h>
#include <iostream>
#include <math.h>
#include <vector>
#include <queue>
#include <stack>
#include <deque>
#include <algorithm>
#include <utility>
#include <set>
#include <map>
#include <stdlib.h>
#include <cstring>
#include <string.h>
#include <string>
#include <sstream>
#include <assert.h>
#include <climits>
#include <sstream>
#include <numeric>
#include <time.h>
#include <limits.h>
#include <list>
#include <bitset>
#include <unordered_map>
#include <unordered_set>
#include <random>
#include <iomanip>
#include <complex>
#include <chrono>
#include <fstream>
#include <functional>
#include <unistd.h>
// #pragma GCC optimize("Ofast,no-stack-protector")
// #pragma GCC optimize("O3,unroll-loops")
// #pragma GCC target("avx,avx2,bmi,bmi2,lzcnt,popcnt")
#define lowbit(x) ((x) & -(x))
#define ml(a, b) ((1ll * (a) * (b)) % M)
#define tml(a, b) (a) = ((1ll * (a) * (b)) % M)
#define ad(a, b) ((0ll + (a) + (b)) % M)
#define tad(a, b) (a) = ((0ll + (a) + (b)) % M)
#define mi(a, b) ((0ll + M + (a) - (b)) % M)
#define tmi(a, b) (a) = ((0ll + M + (a) - (b)) % M)
#define tmin(a, b) (a) = min((a), (b))
#define tmax(a, b) (a) = max((a), (b))
#define iter(a) (a).begin(), (a).end()
#define riter(a) (a).rbegin(), (a).rend()
#define init(a, b) memset((a), (b), sizeof(a))
#define cpy(a, b) memcpy((a), (b), sizeof(a))
#define uni(a) a.resize(unique(iter(a)) - a.begin())
#define pb emplace_back
#define mpr make_pair
#define ls(i) ((i) << 1)
#define rs(i) ((i) << 1 | 1)
#define INF 0x3f3f3f3f
#define NIF 0xc0c0c0c0
#define eps 1e-9
#define F first
#define S second
#define AC cin.tie(0)->sync_with_stdio(0)
using namespace std;
typedef long long llt;
typedef pair<int, int> pii;
typedef pair<double, double> pdd;
typedef pair<llt, llt> pll;
typedef complex<double> cd;
// const int M = 998244353;

// random_device rm;
// mt19937 rg(rm());
// default_random_engine rg(rm());
// uniform_int_distribution<int> rd(INT_MIN, INT_MAX);
// uniform_real_distribution<double> rd(0, M_PI);

void db() { cerr << "\n"; }
template <class T, class... U>
void db(T a, U... b) { cerr << a << " ", db(b...); }

inline char gc()
{
    const static int SZ = 1 << 16;
    static char buf[SZ], *p1, *p2;
    if (p1 == p2 && (p2 = buf + fread(p1 = buf, 1, SZ, stdin), p1 == p2))
        return -1;
    return *p1++;
}
void rd() {}
template <typename T, typename... U>
void rd(T &x, U &...y)
{
    x = 0;
    bool f = 0;
    char c = gc();
    while (!isdigit(c))
        f ^= !(c ^ 45), c = gc();
    while (isdigit(c))
        x = (x << 1) + (x << 3) + (c ^ 48), c = gc();
    f && (x = -x), rd(y...);
}

template <typename T>
void prt(T x)
{
    if (x < 0)
        putchar('-'), x = -x;
    if (x > 9)
        prt(x / 10);
    putchar((x % 10) ^ 48);
}

const int N = 1e5 + 5, M = N << 1, K = 18;
int ar[M], br[M], tmx[K][M], tmn[K][M], n;
vector<int> q1[N], q2[N];

inline bool in(int p, int l, int r)
{
    return l <= p && p <= r;
}

inline void blx(int *tr)
{
    for (int i = n - 1; i > 0; i--)
        tr[i] = max(tr[ls(i)], tr[rs(i)]);
}

inline void bln(int *tr)
{
    for (int i = n - 1; i > 0; i--)
        tr[i] = min(tr[ls(i)], tr[rs(i)]);
}

inline int qyx(int l, int r, int *tr)
{
    int res = r;
    for (l += n - 1, r += n - 1; l <= r; r >>= 1, l >>= 1)
    {
        if (l & 1)
            tmax(res, tr[l++]);
        if (~r & 1)
            tmax(res, tr[r--]);
    }
    return res;
}

inline int qyn(int l, int r, int *tr)
{
    int res = l;
    for (l += n - 1, r += n - 1; l <= r; r >>= 1, l >>= 1)
    {
        if (l & 1)
            tmin(res, tr[l++]);
        if (~r & 1)
            tmin(res, tr[r--]);
    }
    return res;
}

signed main()
{
    int k, m, q, l, r, x, y;
    rd(n, k, m);
    for (int i = 0; i < m; i++)
    {
        rd(ar[i], br[i]);
        if (ar[i] < br[i])
            q1[ar[i]].pb(i), q2[min(ar[i] + k, br[i])].pb(i);
    }
    multiset<int> st;
    for (int i = 1; i <= n; i++)
    {
        for (int j : q1[i])
            st.insert(br[j]);
        for (int j : q2[i])
            st.erase(st.lower_bound(br[j]));
        tmx[0][i + n - 1] = st.empty() ? i : *st.rbegin();
        q1[i].clear(), q2[i].clear();
    }
    assert(st.empty());
    for (int i = 0; i < m; i++)
        if (ar[i] > br[i])
            q1[ar[i]].pb(i), q2[max(ar[i] - k, br[i])].pb(i);
    for (int i = n; i > 0; i--)
    {
        for (int j : q1[i])
            st.insert(br[j]);
        for (int j : q2[i])
            st.erase(st.lower_bound(br[j]));
        tmn[0][i + n - 1] = st.empty() ? i : *st.begin();
        q1[i].clear(), q2[i].clear();
    }
    blx(tmx[0]), bln(tmn[0]);
    for (int t = 1; t < K; t++)
    {
        for (int i = 1; i <= n; i++)
        {
            l = qyn(i, i, tmn[t - 1]), r = qyx(i, i, tmx[t - 1]);
            tmn[t][i + n - 1] = qyn(l, r, tmn[t - 1]);
            tmx[t][i + n - 1] = qyx(l, r, tmx[t - 1]);
        }
        blx(tmx[t]), bln(tmn[t]);
    }
    rd(q);
    while (q--)
    {
        rd(x, y), l = r = x;
        int ans = 0;
        for (int t = K - 1; t >= 0; t--)
        {
            int ll = qyn(l, r, tmn[t]);
            int rr = qyx(l, r, tmx[t]);
            if (in(y, ll, rr))
                continue;
            l = ll, r = rr, ans |= 1 << t;
        }
        int ll = qyn(l, r, tmn[0]);
        int rr = qyx(l, r, tmx[0]);
        if (in(y, ll, rr))
            prt(ans + 1), putchar('\n');
        else
            puts("-1");
    }
}
# Verdict Execution time Memory Grader output
1 Correct 5 ms 33368 KB Output is correct
2 Correct 5 ms 33372 KB Output is correct
3 Correct 5 ms 33448 KB Output is correct
4 Correct 6 ms 33372 KB Output is correct
5 Correct 4 ms 33372 KB Output is correct
6 Correct 5 ms 33396 KB Output is correct
7 Correct 5 ms 33372 KB Output is correct
8 Correct 4 ms 33396 KB Output is correct
9 Correct 4 ms 33372 KB Output is correct
10 Correct 5 ms 33452 KB Output is correct
11 Correct 4 ms 33372 KB Output is correct
12 Correct 5 ms 33456 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 33368 KB Output is correct
2 Correct 5 ms 33372 KB Output is correct
3 Correct 5 ms 33448 KB Output is correct
4 Correct 6 ms 33372 KB Output is correct
5 Correct 4 ms 33372 KB Output is correct
6 Correct 5 ms 33396 KB Output is correct
7 Correct 5 ms 33372 KB Output is correct
8 Correct 4 ms 33396 KB Output is correct
9 Correct 4 ms 33372 KB Output is correct
10 Correct 5 ms 33452 KB Output is correct
11 Correct 4 ms 33372 KB Output is correct
12 Correct 5 ms 33456 KB Output is correct
13 Correct 9 ms 33628 KB Output is correct
14 Correct 9 ms 33584 KB Output is correct
15 Correct 7 ms 33372 KB Output is correct
16 Correct 7 ms 33376 KB Output is correct
17 Correct 7 ms 33372 KB Output is correct
18 Correct 6 ms 33628 KB Output is correct
19 Correct 7 ms 33624 KB Output is correct
20 Correct 7 ms 33380 KB Output is correct
21 Correct 6 ms 33372 KB Output is correct
22 Correct 6 ms 33372 KB Output is correct
23 Correct 8 ms 33372 KB Output is correct
24 Correct 7 ms 33372 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 191 ms 40276 KB Output is correct
2 Correct 195 ms 39764 KB Output is correct
3 Correct 235 ms 41040 KB Output is correct
4 Correct 173 ms 39928 KB Output is correct
5 Correct 157 ms 43664 KB Output is correct
6 Correct 160 ms 43348 KB Output is correct
7 Correct 140 ms 45672 KB Output is correct
8 Correct 141 ms 40304 KB Output is correct
9 Correct 124 ms 40412 KB Output is correct
10 Correct 155 ms 42584 KB Output is correct
11 Correct 162 ms 42580 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 197 ms 41904 KB Output is correct
2 Correct 206 ms 44624 KB Output is correct
3 Correct 264 ms 42168 KB Output is correct
4 Correct 150 ms 46028 KB Output is correct
5 Correct 176 ms 45392 KB Output is correct
6 Correct 170 ms 45652 KB Output is correct
7 Correct 219 ms 43152 KB Output is correct
8 Correct 256 ms 43400 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 392 ms 45244 KB Output is correct
2 Correct 316 ms 42192 KB Output is correct
3 Correct 277 ms 38376 KB Output is correct
4 Correct 296 ms 35664 KB Output is correct
5 Correct 173 ms 34388 KB Output is correct
6 Correct 284 ms 34132 KB Output is correct
7 Correct 263 ms 44024 KB Output is correct
8 Correct 5 ms 33372 KB Output is correct
9 Correct 8 ms 33424 KB Output is correct
10 Correct 327 ms 45420 KB Output is correct
11 Correct 314 ms 47440 KB Output is correct
12 Correct 346 ms 45688 KB Output is correct
13 Correct 323 ms 47296 KB Output is correct
14 Correct 4 ms 33372 KB Output is correct
15 Correct 9 ms 33372 KB Output is correct
16 Correct 238 ms 43164 KB Output is correct
17 Correct 381 ms 43488 KB Output is correct
18 Correct 374 ms 43604 KB Output is correct
19 Correct 359 ms 43344 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 33368 KB Output is correct
2 Correct 5 ms 33372 KB Output is correct
3 Correct 5 ms 33448 KB Output is correct
4 Correct 6 ms 33372 KB Output is correct
5 Correct 4 ms 33372 KB Output is correct
6 Correct 5 ms 33396 KB Output is correct
7 Correct 5 ms 33372 KB Output is correct
8 Correct 4 ms 33396 KB Output is correct
9 Correct 4 ms 33372 KB Output is correct
10 Correct 5 ms 33452 KB Output is correct
11 Correct 4 ms 33372 KB Output is correct
12 Correct 5 ms 33456 KB Output is correct
13 Correct 9 ms 33628 KB Output is correct
14 Correct 9 ms 33584 KB Output is correct
15 Correct 7 ms 33372 KB Output is correct
16 Correct 7 ms 33376 KB Output is correct
17 Correct 7 ms 33372 KB Output is correct
18 Correct 6 ms 33628 KB Output is correct
19 Correct 7 ms 33624 KB Output is correct
20 Correct 7 ms 33380 KB Output is correct
21 Correct 6 ms 33372 KB Output is correct
22 Correct 6 ms 33372 KB Output is correct
23 Correct 8 ms 33372 KB Output is correct
24 Correct 7 ms 33372 KB Output is correct
25 Correct 191 ms 40276 KB Output is correct
26 Correct 195 ms 39764 KB Output is correct
27 Correct 235 ms 41040 KB Output is correct
28 Correct 173 ms 39928 KB Output is correct
29 Correct 157 ms 43664 KB Output is correct
30 Correct 160 ms 43348 KB Output is correct
31 Correct 140 ms 45672 KB Output is correct
32 Correct 141 ms 40304 KB Output is correct
33 Correct 124 ms 40412 KB Output is correct
34 Correct 155 ms 42584 KB Output is correct
35 Correct 162 ms 42580 KB Output is correct
36 Correct 197 ms 41904 KB Output is correct
37 Correct 206 ms 44624 KB Output is correct
38 Correct 264 ms 42168 KB Output is correct
39 Correct 150 ms 46028 KB Output is correct
40 Correct 176 ms 45392 KB Output is correct
41 Correct 170 ms 45652 KB Output is correct
42 Correct 219 ms 43152 KB Output is correct
43 Correct 256 ms 43400 KB Output is correct
44 Correct 392 ms 45244 KB Output is correct
45 Correct 316 ms 42192 KB Output is correct
46 Correct 277 ms 38376 KB Output is correct
47 Correct 296 ms 35664 KB Output is correct
48 Correct 173 ms 34388 KB Output is correct
49 Correct 284 ms 34132 KB Output is correct
50 Correct 263 ms 44024 KB Output is correct
51 Correct 5 ms 33372 KB Output is correct
52 Correct 8 ms 33424 KB Output is correct
53 Correct 327 ms 45420 KB Output is correct
54 Correct 314 ms 47440 KB Output is correct
55 Correct 346 ms 45688 KB Output is correct
56 Correct 323 ms 47296 KB Output is correct
57 Correct 4 ms 33372 KB Output is correct
58 Correct 9 ms 33372 KB Output is correct
59 Correct 238 ms 43164 KB Output is correct
60 Correct 381 ms 43488 KB Output is correct
61 Correct 374 ms 43604 KB Output is correct
62 Correct 359 ms 43344 KB Output is correct
63 Correct 292 ms 40020 KB Output is correct
64 Correct 362 ms 41552 KB Output is correct
65 Correct 311 ms 40648 KB Output is correct
66 Correct 197 ms 44476 KB Output is correct
67 Correct 301 ms 44116 KB Output is correct
68 Correct 183 ms 43472 KB Output is correct
69 Correct 181 ms 45396 KB Output is correct
70 Correct 226 ms 43348 KB Output is correct
71 Correct 295 ms 43272 KB Output is correct