Submission #636943

# Submission time Handle Problem Language Result Execution time Memory
636943 2022-08-30T15:35:33 Z tabr Roller Coaster Railroad (IOI16_railroad) C++17
100 / 100
202 ms 17168 KB
#include <bits/stdc++.h>
using namespace std;
#ifdef tabr
#include "library/debug.cpp"
#else
#define debug(...)
#endif

// editorial

struct dsu {
    vector<int> p;
    vector<int> sz;
    int n;

    dsu(int _n) : n(_n) {
        p = vector<int>(n);
        iota(p.begin(), p.end(), 0);
        sz = vector<int>(n, 1);
    }

    inline int get(int x) {
        if (p[x] == x) {
            return x;
        } else {
            return p[x] = get(p[x]);
        }
    }

    inline bool unite(int x, int y) {
        x = get(x);
        y = get(y);
        if (x == y) {
            return false;
        }
        p[x] = y;
        sz[y] += sz[x];
        return true;
    }

    inline bool same(int x, int y) {
        return (get(x) == get(y));
    }

    inline int size(int x) {
        return sz[get(x)];
    }

    inline bool root(int x) {
        return (x == get(x));
    }
};

long long plan_roller_coaster(vector<int> s, vector<int> t) {
    s.emplace_back((int) 1e9);
    t.emplace_back(1);
    int n = (int) s.size();
    vector<int> p;
    for (int i = 0; i < n; i++) {
        p.emplace_back(s[i]);
        p.emplace_back(t[i]);
    }
    sort(p.begin(), p.end());
    p.resize(unique(p.begin(), p.end()) - p.begin());
    int m = (int) p.size();
    dsu uf(m);
    vector<int> a(m);
    for (int i = 0; i < n; i++) {
        int x = (int) (lower_bound(p.begin(), p.end(), s[i]) - p.begin());
        int y = (int) (lower_bound(p.begin(), p.end(), t[i]) - p.begin());
        uf.unite(x, y);
        a[x]++;
        a[y]--;
    }
    long long res = 0;
    for (int i = 0; i < m - 1; i++) {
        a[i + 1] += a[i];
        if (a[i]) {
            uf.unite(i, i + 1);
        }
        if (a[i] > 0) {
            res += a[i] * 1LL * (p[i + 1] - p[i]);
        }
    }
    vector<pair<int, int>> edges;
    for (int i = 0; i < m - 1; i++) {
        if (!uf.same(i, i + 1)) {
            edges.emplace_back(p[i + 1] - p[i], i);
        }
    }
    sort(edges.begin(), edges.end());
    for (auto [x, y] : edges) {
        if (uf.unite(y, y + 1)) {
            res += x;
        }
    }
    return res;
}

#ifdef tabr
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    debug(plan_roller_coaster({1, 4, 5, 6}, {7, 3, 8, 6}));
    return 0;
}
#endif
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB n = 2
2 Correct 0 ms 212 KB n = 2
3 Correct 0 ms 212 KB n = 2
4 Correct 0 ms 212 KB n = 2
5 Correct 0 ms 212 KB n = 2
6 Correct 0 ms 212 KB n = 2
7 Correct 0 ms 212 KB n = 3
8 Correct 0 ms 212 KB n = 3
9 Correct 0 ms 212 KB n = 3
10 Correct 1 ms 212 KB n = 8
11 Correct 0 ms 212 KB n = 8
12 Correct 0 ms 212 KB n = 8
13 Correct 1 ms 212 KB n = 8
14 Correct 1 ms 212 KB n = 8
15 Correct 0 ms 212 KB n = 8
16 Correct 0 ms 212 KB n = 8
17 Correct 1 ms 212 KB n = 8
18 Correct 1 ms 212 KB n = 8
19 Correct 0 ms 212 KB n = 3
20 Correct 0 ms 212 KB n = 7
21 Correct 1 ms 212 KB n = 8
22 Correct 0 ms 212 KB n = 8
23 Correct 0 ms 212 KB n = 8
24 Correct 0 ms 212 KB n = 8
25 Correct 0 ms 212 KB n = 8
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB n = 2
2 Correct 0 ms 212 KB n = 2
3 Correct 0 ms 212 KB n = 2
4 Correct 0 ms 212 KB n = 2
5 Correct 0 ms 212 KB n = 2
6 Correct 0 ms 212 KB n = 2
7 Correct 0 ms 212 KB n = 3
8 Correct 0 ms 212 KB n = 3
9 Correct 0 ms 212 KB n = 3
10 Correct 1 ms 212 KB n = 8
11 Correct 0 ms 212 KB n = 8
12 Correct 0 ms 212 KB n = 8
13 Correct 1 ms 212 KB n = 8
14 Correct 1 ms 212 KB n = 8
15 Correct 0 ms 212 KB n = 8
16 Correct 0 ms 212 KB n = 8
17 Correct 1 ms 212 KB n = 8
18 Correct 1 ms 212 KB n = 8
19 Correct 0 ms 212 KB n = 3
20 Correct 0 ms 212 KB n = 7
21 Correct 1 ms 212 KB n = 8
22 Correct 0 ms 212 KB n = 8
23 Correct 0 ms 212 KB n = 8
24 Correct 0 ms 212 KB n = 8
25 Correct 0 ms 212 KB n = 8
26 Correct 0 ms 212 KB n = 8
27 Correct 0 ms 212 KB n = 8
28 Correct 0 ms 212 KB n = 8
29 Correct 0 ms 212 KB n = 16
30 Correct 0 ms 212 KB n = 16
31 Correct 0 ms 212 KB n = 16
32 Correct 0 ms 212 KB n = 16
33 Correct 0 ms 212 KB n = 16
34 Correct 0 ms 212 KB n = 16
35 Correct 0 ms 212 KB n = 16
36 Correct 1 ms 212 KB n = 15
37 Correct 1 ms 212 KB n = 8
38 Correct 0 ms 212 KB n = 16
39 Correct 1 ms 212 KB n = 16
40 Correct 0 ms 212 KB n = 9
41 Correct 0 ms 212 KB n = 16
42 Correct 0 ms 216 KB n = 16
43 Correct 0 ms 224 KB n = 16
44 Correct 0 ms 216 KB n = 9
45 Correct 0 ms 220 KB n = 15
46 Correct 0 ms 216 KB n = 16
47 Correct 0 ms 212 KB n = 16
48 Correct 0 ms 212 KB n = 16
# Verdict Execution time Memory Grader output
1 Correct 180 ms 10748 KB n = 199999
2 Correct 180 ms 10652 KB n = 199991
3 Correct 169 ms 10636 KB n = 199993
4 Correct 123 ms 8488 KB n = 152076
5 Correct 70 ms 5096 KB n = 93249
6 Correct 148 ms 9900 KB n = 199910
7 Correct 144 ms 11008 KB n = 199999
8 Correct 148 ms 10284 KB n = 199997
9 Correct 149 ms 9388 KB n = 171294
10 Correct 115 ms 7076 KB n = 140872
11 Correct 141 ms 9892 KB n = 199886
12 Correct 143 ms 11036 KB n = 199996
13 Correct 155 ms 10528 KB n = 200000
14 Correct 145 ms 12076 KB n = 199998
15 Correct 160 ms 11588 KB n = 200000
16 Correct 162 ms 11552 KB n = 199998
17 Correct 154 ms 13212 KB n = 200000
18 Correct 153 ms 10456 KB n = 190000
19 Correct 128 ms 11932 KB n = 177777
20 Correct 71 ms 5416 KB n = 100000
21 Correct 156 ms 10660 KB n = 200000
22 Correct 177 ms 12684 KB n = 200000
23 Correct 154 ms 10668 KB n = 200000
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB n = 2
2 Correct 0 ms 212 KB n = 2
3 Correct 0 ms 212 KB n = 2
4 Correct 0 ms 212 KB n = 2
5 Correct 0 ms 212 KB n = 2
6 Correct 0 ms 212 KB n = 2
7 Correct 0 ms 212 KB n = 3
8 Correct 0 ms 212 KB n = 3
9 Correct 0 ms 212 KB n = 3
10 Correct 1 ms 212 KB n = 8
11 Correct 0 ms 212 KB n = 8
12 Correct 0 ms 212 KB n = 8
13 Correct 1 ms 212 KB n = 8
14 Correct 1 ms 212 KB n = 8
15 Correct 0 ms 212 KB n = 8
16 Correct 0 ms 212 KB n = 8
17 Correct 1 ms 212 KB n = 8
18 Correct 1 ms 212 KB n = 8
19 Correct 0 ms 212 KB n = 3
20 Correct 0 ms 212 KB n = 7
21 Correct 1 ms 212 KB n = 8
22 Correct 0 ms 212 KB n = 8
23 Correct 0 ms 212 KB n = 8
24 Correct 0 ms 212 KB n = 8
25 Correct 0 ms 212 KB n = 8
26 Correct 0 ms 212 KB n = 8
27 Correct 0 ms 212 KB n = 8
28 Correct 0 ms 212 KB n = 8
29 Correct 0 ms 212 KB n = 16
30 Correct 0 ms 212 KB n = 16
31 Correct 0 ms 212 KB n = 16
32 Correct 0 ms 212 KB n = 16
33 Correct 0 ms 212 KB n = 16
34 Correct 0 ms 212 KB n = 16
35 Correct 0 ms 212 KB n = 16
36 Correct 1 ms 212 KB n = 15
37 Correct 1 ms 212 KB n = 8
38 Correct 0 ms 212 KB n = 16
39 Correct 1 ms 212 KB n = 16
40 Correct 0 ms 212 KB n = 9
41 Correct 0 ms 212 KB n = 16
42 Correct 0 ms 216 KB n = 16
43 Correct 0 ms 224 KB n = 16
44 Correct 0 ms 216 KB n = 9
45 Correct 0 ms 220 KB n = 15
46 Correct 0 ms 216 KB n = 16
47 Correct 0 ms 212 KB n = 16
48 Correct 0 ms 212 KB n = 16
49 Correct 180 ms 10748 KB n = 199999
50 Correct 180 ms 10652 KB n = 199991
51 Correct 169 ms 10636 KB n = 199993
52 Correct 123 ms 8488 KB n = 152076
53 Correct 70 ms 5096 KB n = 93249
54 Correct 148 ms 9900 KB n = 199910
55 Correct 144 ms 11008 KB n = 199999
56 Correct 148 ms 10284 KB n = 199997
57 Correct 149 ms 9388 KB n = 171294
58 Correct 115 ms 7076 KB n = 140872
59 Correct 141 ms 9892 KB n = 199886
60 Correct 143 ms 11036 KB n = 199996
61 Correct 155 ms 10528 KB n = 200000
62 Correct 145 ms 12076 KB n = 199998
63 Correct 160 ms 11588 KB n = 200000
64 Correct 162 ms 11552 KB n = 199998
65 Correct 154 ms 13212 KB n = 200000
66 Correct 153 ms 10456 KB n = 190000
67 Correct 128 ms 11932 KB n = 177777
68 Correct 71 ms 5416 KB n = 100000
69 Correct 156 ms 10660 KB n = 200000
70 Correct 177 ms 12684 KB n = 200000
71 Correct 154 ms 10668 KB n = 200000
72 Correct 181 ms 10664 KB n = 200000
73 Correct 178 ms 10644 KB n = 200000
74 Correct 164 ms 10640 KB n = 200000
75 Correct 143 ms 10672 KB n = 200000
76 Correct 157 ms 10660 KB n = 200000
77 Correct 120 ms 9868 KB n = 200000
78 Correct 158 ms 14292 KB n = 200000
79 Correct 158 ms 13332 KB n = 184307
80 Correct 57 ms 5364 KB n = 76040
81 Correct 144 ms 12696 KB n = 199981
82 Correct 145 ms 14232 KB n = 199994
83 Correct 180 ms 13340 KB n = 199996
84 Correct 142 ms 15120 KB n = 199998
85 Correct 150 ms 14624 KB n = 200000
86 Correct 183 ms 14884 KB n = 199998
87 Correct 160 ms 17168 KB n = 200000
88 Correct 168 ms 15144 KB n = 200000
89 Correct 152 ms 17164 KB n = 200000
90 Correct 202 ms 14504 KB n = 200000
91 Correct 178 ms 16540 KB n = 200000
92 Correct 159 ms 14488 KB n = 200000