Submission #162604

# Submission time Handle Problem Language Result Execution time Memory
162604 2019-11-09T02:40:38 Z rama_pang Roller Coaster Railroad (IOI16_railroad) C++14
100 / 100
383 ms 24516 KB
#include "railroad.h"
#include <bits/stdc++.h>
using namespace std;
using lint = long long;
const lint INF = 1e9;

lint plan_roller_coaster(vector<int> s, vector<int> t) {
    s.emplace_back(INF), t.emplace_back(1);
    int N = s.size(), M;
    vector<int> coord, flow;
    vector<tuple<int, int, int>> edges; // tuple < cost, endpoint 1, endpoint 2 >
    lint res = 0;
    
    /* Coordinate compressions */
    auto get_pos = [&] (int n) { 
        return lower_bound(coord.begin(), coord.end(), n) - coord.begin();
    };

    for (int i = 0; i < N; i++)
        coord.emplace_back(s[i]), coord.emplace_back(t[i]);
    
    sort(coord.begin(), coord.end());
    coord.resize(unique(coord.begin(), coord.end()) - coord.begin());

    M = coord.size(), flow.resize(M);

    for (int i = 0; i < N; i++) {
        s[i] = get_pos(s[i]), t[i] = get_pos(t[i]);
        flow[s[i]]++, flow[t[i]]--; // if s[i] < t[i], [s[i], t[i]) + 1, else [s[i], t[i]) - 1
        edges.emplace_back(0, s[i], t[i]);
    }
    
    for (int i = 1; i < M; i++)
        flow[i] += flow[i - 1];

    for (int i = 0; i < M - 1; i++) {
        res += max(0ll, (lint)flow[i] * (coord[i + 1] - coord[i]));
        if (flow[i] == 0)
            edges.emplace_back(coord[i + 1] - coord[i], i, i + 1);
        else
            edges.emplace_back(0, i, i + 1);
    }

    /* Disjoint Set Union Find Data Structure */
    vector<int> par(M);
    iota(par.begin(), par.end(), 0);
    auto find = [&](int n) {
        auto lambda = [&](int n, const auto &lambda) {
            if (par[n] == n) return n;
            return par[n] = lambda(par[n], lambda);
        };
        return lambda(n, lambda);
    };

    /* Minimum Spanning Tree */
    sort(edges.begin(), edges.end());
    for (auto e : edges) {
        if (find(get<1>(e)) != find(get<2>(e))) {
            res += get<0>(e);
            par[find(get<1>(e))] = find(get<2>(e));
        }
    }

    return res;
}
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB n = 2
2 Correct 2 ms 376 KB n = 2
3 Correct 2 ms 256 KB n = 2
4 Correct 2 ms 256 KB n = 2
5 Correct 2 ms 376 KB n = 2
6 Correct 2 ms 376 KB n = 2
7 Correct 2 ms 376 KB n = 3
8 Correct 2 ms 376 KB n = 3
9 Correct 2 ms 380 KB n = 3
10 Correct 2 ms 256 KB n = 8
11 Correct 2 ms 376 KB n = 8
12 Correct 2 ms 376 KB n = 8
13 Correct 2 ms 256 KB n = 8
14 Correct 2 ms 256 KB n = 8
15 Correct 2 ms 256 KB n = 8
16 Correct 2 ms 376 KB n = 8
17 Correct 2 ms 376 KB n = 8
18 Correct 2 ms 376 KB n = 8
19 Correct 2 ms 392 KB n = 3
20 Correct 2 ms 376 KB n = 7
21 Correct 2 ms 376 KB n = 8
22 Correct 2 ms 376 KB n = 8
23 Correct 2 ms 376 KB n = 8
24 Correct 2 ms 256 KB n = 8
25 Correct 2 ms 256 KB n = 8
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB n = 2
2 Correct 2 ms 376 KB n = 2
3 Correct 2 ms 256 KB n = 2
4 Correct 2 ms 256 KB n = 2
5 Correct 2 ms 376 KB n = 2
6 Correct 2 ms 376 KB n = 2
7 Correct 2 ms 376 KB n = 3
8 Correct 2 ms 376 KB n = 3
9 Correct 2 ms 380 KB n = 3
10 Correct 2 ms 256 KB n = 8
11 Correct 2 ms 376 KB n = 8
12 Correct 2 ms 376 KB n = 8
13 Correct 2 ms 256 KB n = 8
14 Correct 2 ms 256 KB n = 8
15 Correct 2 ms 256 KB n = 8
16 Correct 2 ms 376 KB n = 8
17 Correct 2 ms 376 KB n = 8
18 Correct 2 ms 376 KB n = 8
19 Correct 2 ms 392 KB n = 3
20 Correct 2 ms 376 KB n = 7
21 Correct 2 ms 376 KB n = 8
22 Correct 2 ms 376 KB n = 8
23 Correct 2 ms 376 KB n = 8
24 Correct 2 ms 256 KB n = 8
25 Correct 2 ms 256 KB n = 8
26 Correct 2 ms 256 KB n = 8
27 Correct 2 ms 256 KB n = 8
28 Correct 2 ms 256 KB n = 8
29 Correct 2 ms 256 KB n = 16
30 Correct 2 ms 256 KB n = 16
31 Correct 2 ms 256 KB n = 16
32 Correct 2 ms 376 KB n = 16
33 Correct 2 ms 376 KB n = 16
34 Correct 2 ms 360 KB n = 16
35 Correct 2 ms 376 KB n = 16
36 Correct 2 ms 376 KB n = 15
37 Correct 2 ms 376 KB n = 8
38 Correct 2 ms 376 KB n = 16
39 Correct 2 ms 256 KB n = 16
40 Correct 2 ms 256 KB n = 9
41 Correct 2 ms 256 KB n = 16
42 Correct 2 ms 256 KB n = 16
43 Correct 2 ms 256 KB n = 16
44 Correct 2 ms 256 KB n = 9
45 Correct 2 ms 256 KB n = 15
46 Correct 2 ms 356 KB n = 16
47 Correct 2 ms 256 KB n = 16
48 Correct 2 ms 256 KB n = 16
# Verdict Execution time Memory Grader output
1 Correct 383 ms 24440 KB n = 199999
2 Correct 325 ms 24368 KB n = 199991
3 Correct 341 ms 24480 KB n = 199993
4 Correct 228 ms 15432 KB n = 152076
5 Correct 145 ms 11948 KB n = 93249
6 Correct 267 ms 22984 KB n = 199910
7 Correct 282 ms 23800 KB n = 199999
8 Correct 259 ms 22984 KB n = 199997
9 Correct 263 ms 16716 KB n = 171294
10 Correct 215 ms 15164 KB n = 140872
11 Correct 263 ms 22984 KB n = 199886
12 Correct 277 ms 23748 KB n = 199996
13 Correct 289 ms 23292 KB n = 200000
14 Correct 287 ms 23492 KB n = 199998
15 Correct 284 ms 23492 KB n = 200000
16 Correct 293 ms 23880 KB n = 199998
17 Correct 305 ms 24392 KB n = 200000
18 Correct 282 ms 23832 KB n = 190000
19 Correct 275 ms 23320 KB n = 177777
20 Correct 142 ms 12380 KB n = 100000
21 Correct 304 ms 24404 KB n = 200000
22 Correct 321 ms 24392 KB n = 200000
23 Correct 314 ms 24516 KB n = 200000
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB n = 2
2 Correct 2 ms 376 KB n = 2
3 Correct 2 ms 256 KB n = 2
4 Correct 2 ms 256 KB n = 2
5 Correct 2 ms 376 KB n = 2
6 Correct 2 ms 376 KB n = 2
7 Correct 2 ms 376 KB n = 3
8 Correct 2 ms 376 KB n = 3
9 Correct 2 ms 380 KB n = 3
10 Correct 2 ms 256 KB n = 8
11 Correct 2 ms 376 KB n = 8
12 Correct 2 ms 376 KB n = 8
13 Correct 2 ms 256 KB n = 8
14 Correct 2 ms 256 KB n = 8
15 Correct 2 ms 256 KB n = 8
16 Correct 2 ms 376 KB n = 8
17 Correct 2 ms 376 KB n = 8
18 Correct 2 ms 376 KB n = 8
19 Correct 2 ms 392 KB n = 3
20 Correct 2 ms 376 KB n = 7
21 Correct 2 ms 376 KB n = 8
22 Correct 2 ms 376 KB n = 8
23 Correct 2 ms 376 KB n = 8
24 Correct 2 ms 256 KB n = 8
25 Correct 2 ms 256 KB n = 8
26 Correct 2 ms 256 KB n = 8
27 Correct 2 ms 256 KB n = 8
28 Correct 2 ms 256 KB n = 8
29 Correct 2 ms 256 KB n = 16
30 Correct 2 ms 256 KB n = 16
31 Correct 2 ms 256 KB n = 16
32 Correct 2 ms 376 KB n = 16
33 Correct 2 ms 376 KB n = 16
34 Correct 2 ms 360 KB n = 16
35 Correct 2 ms 376 KB n = 16
36 Correct 2 ms 376 KB n = 15
37 Correct 2 ms 376 KB n = 8
38 Correct 2 ms 376 KB n = 16
39 Correct 2 ms 256 KB n = 16
40 Correct 2 ms 256 KB n = 9
41 Correct 2 ms 256 KB n = 16
42 Correct 2 ms 256 KB n = 16
43 Correct 2 ms 256 KB n = 16
44 Correct 2 ms 256 KB n = 9
45 Correct 2 ms 256 KB n = 15
46 Correct 2 ms 356 KB n = 16
47 Correct 2 ms 256 KB n = 16
48 Correct 2 ms 256 KB n = 16
49 Correct 383 ms 24440 KB n = 199999
50 Correct 325 ms 24368 KB n = 199991
51 Correct 341 ms 24480 KB n = 199993
52 Correct 228 ms 15432 KB n = 152076
53 Correct 145 ms 11948 KB n = 93249
54 Correct 267 ms 22984 KB n = 199910
55 Correct 282 ms 23800 KB n = 199999
56 Correct 259 ms 22984 KB n = 199997
57 Correct 263 ms 16716 KB n = 171294
58 Correct 215 ms 15164 KB n = 140872
59 Correct 263 ms 22984 KB n = 199886
60 Correct 277 ms 23748 KB n = 199996
61 Correct 289 ms 23292 KB n = 200000
62 Correct 287 ms 23492 KB n = 199998
63 Correct 284 ms 23492 KB n = 200000
64 Correct 293 ms 23880 KB n = 199998
65 Correct 305 ms 24392 KB n = 200000
66 Correct 282 ms 23832 KB n = 190000
67 Correct 275 ms 23320 KB n = 177777
68 Correct 142 ms 12380 KB n = 100000
69 Correct 304 ms 24404 KB n = 200000
70 Correct 321 ms 24392 KB n = 200000
71 Correct 314 ms 24516 KB n = 200000
72 Correct 319 ms 24312 KB n = 200000
73 Correct 332 ms 24388 KB n = 200000
74 Correct 368 ms 24264 KB n = 200000
75 Correct 322 ms 24420 KB n = 200000
76 Correct 299 ms 24332 KB n = 200000
77 Correct 247 ms 19016 KB n = 200000
78 Correct 246 ms 17360 KB n = 200000
79 Correct 294 ms 23472 KB n = 184307
80 Correct 113 ms 8088 KB n = 76040
81 Correct 283 ms 23124 KB n = 199981
82 Correct 276 ms 23696 KB n = 199994
83 Correct 262 ms 23112 KB n = 199996
84 Correct 282 ms 23496 KB n = 199998
85 Correct 301 ms 23520 KB n = 200000
86 Correct 295 ms 23880 KB n = 199998
87 Correct 303 ms 24396 KB n = 200000
88 Correct 345 ms 24388 KB n = 200000
89 Correct 291 ms 24408 KB n = 200000
90 Correct 303 ms 24464 KB n = 200000
91 Correct 322 ms 24392 KB n = 200000
92 Correct 315 ms 24452 KB n = 200000