Submission #573666

# Submission time Handle Problem Language Result Execution time Memory
573666 2022-06-07T04:37:23 Z eecs Event Hopping (BOI22_events) C++17
50 / 100
1500 ms 287564 KB
#include <bits/stdc++.h>
using namespace std;

const int maxn = 100010, SZ = 700;
int n, q, b[maxn], rmq[17][maxn], bel[maxn], bl[maxn], br[maxn];
int num[maxn / SZ + 5][SZ + 5], tmp[maxn], sz[maxn], rb[maxn];
short pos[maxn][SZ + 5], tr[maxn][SZ + 5];
array<int, 2> a[maxn];

int main() {
    ios::sync_with_stdio(0), cin.tie(0);
    cin >> n >> q;
    vector<int> V;
    for (int i = 1; i <= n; i++) {
        cin >> a[i][0] >> a[i][1], V.push_back(a[i][1]);
    }
    sort(V.begin(), V.end());
    V.resize(unique(V.begin(), V.end()) - V.begin());
    fill(b + 1, b + n + 1, n + 1);
    for (int i = 1; i <= n; i++) {
        a[i][0] = lower_bound(V.begin(), V.end(), a[i][0]) - V.begin() + 1;
        a[i][1] = lower_bound(V.begin(), V.end(), a[i][1]) - V.begin() + 1;
        b[a[i][1]] = min(b[a[i][1]], a[i][0]);
    }
    for (int i = 1; i <= n; i++) {
        br[bel[i] = (i - 1) / SZ + 1] = i;
        if (!bl[bel[i]]) bl[bel[i]] = i;
    }
    copy(b + 1, b + n + 1, rmq[0] + 1);
    for (int k = 1; k < 17; k++) {
        memcpy(rmq[k], rmq[k - 1], sizeof(rmq[k]));
        for (int i = (1 << (k - 1)) + 1; i <= n; i++) {
            rmq[k][i] = min(rmq[k][i], rmq[k - 1][i - (1 << (k - 1))]);
        }
    }
    auto qmin = [&](int l, int r) {
        int k = __lg(r - l + 1);
        return min(rmq[k][l + (1 << k) - 1], rmq[k][r]);
    };
    auto go = [&](int s, int r) {
        if (rb[s]) r = min(r, rb[s]);
        if (b[r] <= s) return r;
        for (int i = __lg(r); ~i && r > s; i--) {
            if (rmq[i][r] > s) r -= 1 << i;
        }
        return r <= s ? 0 : r;
    };
    for (int i = 1; i <= n; i++) {
        rb[i] = go(i, n);
    }
    for (int k = 1; k <= bel[n]; k++) {
        for (int i = br[k], j = br[k]; i >= bl[k]; i--) {
            for (; j >= max(bl[k], b[i]); j--) num[k][j - bl[k]] = j < i ? i : 0;
        }
    }
    for (int i = 1; i <= n; i++) {
        int k = bel[i], L = bl[k], R = br[k];
        for (int j = num[k][i - L]; j && j <= R; j = num[k][j - L]) {
            tr[i][sz[i]++] = j - L;
        }
        for (int j = 0, k = 0; j <= R - L; j++) {
            while (k < sz[i] && tr[i][k] < j) k++;
            pos[i][j] = k;
        }
    }
    while (q--) {
        int s, t, ans = 0;
        cin >> s >> t;
        if (s == t) { cout << "0\n"; continue; }
        for (s = a[s][1]; s && s < a[t][0]; ans++) {
            if (bel[s] == bel[a[t][0]]) {
                for (int i = a[t][0], j = a[t][0]; i >= s; i--) {
                    int v = max(s, i == a[t][0] ? qmin(i, a[t][1]) : b[i]);
                    for (; j >= v; j--) tmp[j] = j < i ? i : 0;
                }
                for (; s && s < a[t][0]; ans++) {
                    s = tmp[s];
                }
                break;
            }
            int nxt = qmin(bl[bel[s] + 1], a[t][1]);
            if (nxt <= s) {
                s = go(s, a[t][1]);
            } else {
                if (!sz[s] || nxt - bl[bel[s]] > tr[s][sz[s] - 1]) { s = 0; break; }
                int i = pos[s][nxt - bl[bel[s]]];
                ans += i, s = bl[bel[s]] + tr[s][i];
            }
        }
        if (a[t][0] <= s && s <= a[t][1]) cout << ans + 1 << "\n";
        else cout << "impossible\n";
    }
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 3 ms 6612 KB Output is correct
2 Correct 1125 ms 286780 KB Output is correct
3 Correct 1029 ms 286800 KB Output is correct
4 Correct 779 ms 286888 KB Output is correct
5 Correct 1071 ms 286936 KB Output is correct
6 Correct 1107 ms 286808 KB Output is correct
7 Correct 1116 ms 286876 KB Output is correct
8 Correct 237 ms 149704 KB Output is correct
9 Correct 189 ms 148864 KB Output is correct
10 Correct 487 ms 287564 KB Output is correct
11 Correct 508 ms 287440 KB Output is correct
12 Correct 174 ms 148660 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 6612 KB Output is correct
2 Correct 4 ms 6612 KB Output is correct
3 Correct 7 ms 9428 KB Output is correct
4 Correct 6 ms 9380 KB Output is correct
5 Correct 6 ms 9428 KB Output is correct
6 Correct 5 ms 8660 KB Output is correct
7 Correct 5 ms 9428 KB Output is correct
8 Correct 5 ms 9380 KB Output is correct
9 Correct 4 ms 8020 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 6612 KB Output is correct
2 Correct 4 ms 6612 KB Output is correct
3 Correct 7 ms 9428 KB Output is correct
4 Correct 6 ms 9380 KB Output is correct
5 Correct 6 ms 9428 KB Output is correct
6 Correct 5 ms 8660 KB Output is correct
7 Correct 5 ms 9428 KB Output is correct
8 Correct 5 ms 9380 KB Output is correct
9 Correct 4 ms 8020 KB Output is correct
10 Correct 3 ms 6612 KB Output is correct
11 Correct 3 ms 6612 KB Output is correct
12 Correct 7 ms 9428 KB Output is correct
13 Correct 6 ms 9436 KB Output is correct
14 Correct 7 ms 9428 KB Output is correct
15 Correct 5 ms 8660 KB Output is correct
16 Correct 7 ms 9428 KB Output is correct
17 Correct 5 ms 9428 KB Output is correct
18 Correct 5 ms 8020 KB Output is correct
19 Correct 178 ms 21068 KB Output is correct
20 Correct 254 ms 21112 KB Output is correct
21 Correct 150 ms 21452 KB Output is correct
22 Correct 39 ms 17868 KB Output is correct
23 Correct 36 ms 21228 KB Output is correct
24 Correct 41 ms 21280 KB Output is correct
25 Correct 191 ms 21252 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 6612 KB Output is correct
2 Correct 4 ms 6612 KB Output is correct
3 Correct 7 ms 9428 KB Output is correct
4 Correct 6 ms 9380 KB Output is correct
5 Correct 6 ms 9428 KB Output is correct
6 Correct 5 ms 8660 KB Output is correct
7 Correct 5 ms 9428 KB Output is correct
8 Correct 5 ms 9380 KB Output is correct
9 Correct 4 ms 8020 KB Output is correct
10 Correct 3 ms 6612 KB Output is correct
11 Correct 3 ms 6608 KB Output is correct
12 Correct 7 ms 9428 KB Output is correct
13 Correct 6 ms 9428 KB Output is correct
14 Correct 6 ms 9428 KB Output is correct
15 Correct 5 ms 8660 KB Output is correct
16 Correct 6 ms 9428 KB Output is correct
17 Correct 7 ms 9428 KB Output is correct
18 Correct 4 ms 8020 KB Output is correct
19 Correct 336 ms 286104 KB Output is correct
20 Correct 348 ms 286332 KB Output is correct
21 Correct 188 ms 216252 KB Output is correct
22 Correct 420 ms 286308 KB Output is correct
23 Correct 212 ms 286136 KB Output is correct
24 Correct 235 ms 286124 KB Output is correct
25 Correct 139 ms 147364 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1107 ms 286888 KB Output is correct
2 Correct 1050 ms 286764 KB Output is correct
3 Correct 790 ms 286900 KB Output is correct
4 Correct 186 ms 148880 KB Output is correct
5 Correct 498 ms 287492 KB Output is correct
6 Correct 504 ms 287320 KB Output is correct
7 Correct 539 ms 287244 KB Output is correct
8 Correct 388 ms 287372 KB Output is correct
9 Correct 206 ms 286176 KB Output is correct
10 Execution timed out 1607 ms 286472 KB Time limit exceeded
11 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 6612 KB Output is correct
2 Correct 1125 ms 286780 KB Output is correct
3 Correct 1029 ms 286800 KB Output is correct
4 Correct 779 ms 286888 KB Output is correct
5 Correct 1071 ms 286936 KB Output is correct
6 Correct 1107 ms 286808 KB Output is correct
7 Correct 1116 ms 286876 KB Output is correct
8 Correct 237 ms 149704 KB Output is correct
9 Correct 189 ms 148864 KB Output is correct
10 Correct 487 ms 287564 KB Output is correct
11 Correct 508 ms 287440 KB Output is correct
12 Correct 174 ms 148660 KB Output is correct
13 Correct 3 ms 6612 KB Output is correct
14 Correct 4 ms 6612 KB Output is correct
15 Correct 7 ms 9428 KB Output is correct
16 Correct 6 ms 9380 KB Output is correct
17 Correct 6 ms 9428 KB Output is correct
18 Correct 5 ms 8660 KB Output is correct
19 Correct 5 ms 9428 KB Output is correct
20 Correct 5 ms 9380 KB Output is correct
21 Correct 4 ms 8020 KB Output is correct
22 Correct 3 ms 6612 KB Output is correct
23 Correct 3 ms 6612 KB Output is correct
24 Correct 7 ms 9428 KB Output is correct
25 Correct 6 ms 9436 KB Output is correct
26 Correct 7 ms 9428 KB Output is correct
27 Correct 5 ms 8660 KB Output is correct
28 Correct 7 ms 9428 KB Output is correct
29 Correct 5 ms 9428 KB Output is correct
30 Correct 5 ms 8020 KB Output is correct
31 Correct 178 ms 21068 KB Output is correct
32 Correct 254 ms 21112 KB Output is correct
33 Correct 150 ms 21452 KB Output is correct
34 Correct 39 ms 17868 KB Output is correct
35 Correct 36 ms 21228 KB Output is correct
36 Correct 41 ms 21280 KB Output is correct
37 Correct 191 ms 21252 KB Output is correct
38 Correct 3 ms 6612 KB Output is correct
39 Correct 3 ms 6608 KB Output is correct
40 Correct 7 ms 9428 KB Output is correct
41 Correct 6 ms 9428 KB Output is correct
42 Correct 6 ms 9428 KB Output is correct
43 Correct 5 ms 8660 KB Output is correct
44 Correct 6 ms 9428 KB Output is correct
45 Correct 7 ms 9428 KB Output is correct
46 Correct 4 ms 8020 KB Output is correct
47 Correct 336 ms 286104 KB Output is correct
48 Correct 348 ms 286332 KB Output is correct
49 Correct 188 ms 216252 KB Output is correct
50 Correct 420 ms 286308 KB Output is correct
51 Correct 212 ms 286136 KB Output is correct
52 Correct 235 ms 286124 KB Output is correct
53 Correct 139 ms 147364 KB Output is correct
54 Correct 1107 ms 286888 KB Output is correct
55 Correct 1050 ms 286764 KB Output is correct
56 Correct 790 ms 286900 KB Output is correct
57 Correct 186 ms 148880 KB Output is correct
58 Correct 498 ms 287492 KB Output is correct
59 Correct 504 ms 287320 KB Output is correct
60 Correct 539 ms 287244 KB Output is correct
61 Correct 388 ms 287372 KB Output is correct
62 Correct 206 ms 286176 KB Output is correct
63 Execution timed out 1607 ms 286472 KB Time limit exceeded
64 Halted 0 ms 0 KB -