Submission #172594

# Submission time Handle Problem Language Result Execution time Memory
172594 2020-01-02T07:25:17 Z gs18103 Roller Coaster Railroad (IOI16_railroad) C++14
100 / 100
269 ms 12928 KB
#include "railroad.h"
#include <bits/stdc++.h>
#define fi first
#define se second
#define eb emplace_back
#define em emplace
#define lob lower_bound
#define upb upper_bound
#define all(v) v.begin(), v.end()

using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;

const int MAX = 505050;
const int INF = 1e9;
const ll LINF = 1e18;

int p[2*MAX], deg[2*MAX];
int find(int x) {return x == p[x] ? x : p[x] = find(p[x]);}
void uni(int x, int y) {p[find(y)] = find(x);}
struct Edge {int u, v, w; Edge(int u, int v, int w) : u(u), v(v), w(w) {}};

ll plan_roller_coaster(vector<int> s, vector<int> t) {
    int n = (int) s.size();
    vector <int> X;
    for(int i = 0; i < n; i++) X.eb(s[i]), X.eb(t[i]);
    sort(all(X)); X.erase(unique(all(X)), X.end());
    for(int i = 1; i <= X.size(); i++) p[i] = i;
    for(int i = 0; i < n; i++) {
        s[i] = lob(all(X), s[i]) - X.begin();
        t[i] = lob(all(X), t[i]) - X.begin();
        deg[s[i]]++;
        deg[t[i]]--;
        uni(s[i], t[i]);
    }
    int cur = 1;
    ll ans = 0;
    vector <Edge> E;
    for(int i = X.size()-1; i >= 0; i--) {
        cur += deg[i];
        if(cur < 0){
            ans -= (ll)cur * (X[i] - X[i-1]);
            uni(i-1, i);
        } 
        if(cur > 0) uni(i, i-1);
        else if(cur == 0) E.eb(i, i-1, X[i] - X[i-1]);
    }
    sort(all(E), [](Edge a, Edge b){return a.w < b.w;});
    for(auto i : E) {
        if(find(i.u) == find(i.v)) continue;
        ans += i.w;
        uni(i.u, i.v);
    }
    return ans;
}

Compilation message

railroad.cpp: In function 'll plan_roller_coaster(std::vector<int>, std::vector<int>)':
railroad.cpp:30:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 1; i <= X.size(); i++) p[i] = i;
                    ~~^~~~~~~~~~~
# 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 380 KB n = 2
4 Correct 2 ms 376 KB n = 2
5 Correct 2 ms 376 KB n = 2
6 Correct 2 ms 376 KB n = 2
7 Correct 2 ms 256 KB n = 3
8 Correct 1 ms 376 KB n = 3
9 Correct 2 ms 376 KB n = 3
10 Correct 2 ms 376 KB n = 8
11 Correct 2 ms 376 KB n = 8
12 Correct 2 ms 376 KB n = 8
13 Correct 2 ms 380 KB n = 8
14 Correct 2 ms 248 KB n = 8
15 Correct 2 ms 376 KB n = 8
16 Correct 2 ms 256 KB n = 8
17 Correct 2 ms 256 KB n = 8
18 Correct 2 ms 376 KB n = 8
19 Correct 2 ms 376 KB n = 3
20 Correct 2 ms 376 KB n = 7
21 Correct 2 ms 256 KB n = 8
22 Correct 2 ms 376 KB n = 8
23 Correct 2 ms 256 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 380 KB n = 2
4 Correct 2 ms 376 KB n = 2
5 Correct 2 ms 376 KB n = 2
6 Correct 2 ms 376 KB n = 2
7 Correct 2 ms 256 KB n = 3
8 Correct 1 ms 376 KB n = 3
9 Correct 2 ms 376 KB n = 3
10 Correct 2 ms 376 KB n = 8
11 Correct 2 ms 376 KB n = 8
12 Correct 2 ms 376 KB n = 8
13 Correct 2 ms 380 KB n = 8
14 Correct 2 ms 248 KB n = 8
15 Correct 2 ms 376 KB n = 8
16 Correct 2 ms 256 KB n = 8
17 Correct 2 ms 256 KB n = 8
18 Correct 2 ms 376 KB n = 8
19 Correct 2 ms 376 KB n = 3
20 Correct 2 ms 376 KB n = 7
21 Correct 2 ms 256 KB n = 8
22 Correct 2 ms 376 KB n = 8
23 Correct 2 ms 256 KB n = 8
24 Correct 2 ms 256 KB n = 8
25 Correct 2 ms 256 KB n = 8
26 Correct 2 ms 376 KB n = 8
27 Correct 2 ms 376 KB n = 8
28 Correct 2 ms 376 KB n = 8
29 Correct 2 ms 376 KB n = 16
30 Correct 6 ms 376 KB n = 16
31 Correct 2 ms 376 KB n = 16
32 Correct 2 ms 256 KB n = 16
33 Correct 2 ms 256 KB n = 16
34 Correct 2 ms 252 KB n = 16
35 Correct 2 ms 256 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 376 KB n = 16
40 Correct 2 ms 376 KB n = 9
41 Correct 2 ms 376 KB n = 16
42 Correct 2 ms 376 KB n = 16
43 Correct 2 ms 376 KB n = 16
44 Correct 2 ms 376 KB n = 9
45 Correct 2 ms 376 KB n = 15
46 Correct 2 ms 376 KB n = 16
47 Correct 2 ms 256 KB n = 16
48 Correct 2 ms 376 KB n = 16
# Verdict Execution time Memory Grader output
1 Correct 215 ms 8288 KB n = 199999
2 Correct 233 ms 8304 KB n = 199991
3 Correct 233 ms 8296 KB n = 199993
4 Correct 158 ms 6408 KB n = 152076
5 Correct 96 ms 4076 KB n = 93249
6 Correct 191 ms 7884 KB n = 199910
7 Correct 194 ms 8296 KB n = 199999
8 Correct 187 ms 7784 KB n = 199997
9 Correct 185 ms 7248 KB n = 171294
10 Correct 149 ms 5980 KB n = 140872
11 Correct 206 ms 7816 KB n = 199886
12 Correct 199 ms 8936 KB n = 199996
13 Correct 193 ms 8588 KB n = 200000
14 Correct 218 ms 12776 KB n = 199998
15 Correct 216 ms 12624 KB n = 200000
16 Correct 247 ms 12776 KB n = 199998
17 Correct 236 ms 11436 KB n = 200000
18 Correct 206 ms 8112 KB n = 190000
19 Correct 185 ms 7380 KB n = 177777
20 Correct 101 ms 4352 KB n = 100000
21 Correct 217 ms 8392 KB n = 200000
22 Correct 260 ms 12868 KB n = 200000
23 Correct 269 ms 12876 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 380 KB n = 2
4 Correct 2 ms 376 KB n = 2
5 Correct 2 ms 376 KB n = 2
6 Correct 2 ms 376 KB n = 2
7 Correct 2 ms 256 KB n = 3
8 Correct 1 ms 376 KB n = 3
9 Correct 2 ms 376 KB n = 3
10 Correct 2 ms 376 KB n = 8
11 Correct 2 ms 376 KB n = 8
12 Correct 2 ms 376 KB n = 8
13 Correct 2 ms 380 KB n = 8
14 Correct 2 ms 248 KB n = 8
15 Correct 2 ms 376 KB n = 8
16 Correct 2 ms 256 KB n = 8
17 Correct 2 ms 256 KB n = 8
18 Correct 2 ms 376 KB n = 8
19 Correct 2 ms 376 KB n = 3
20 Correct 2 ms 376 KB n = 7
21 Correct 2 ms 256 KB n = 8
22 Correct 2 ms 376 KB n = 8
23 Correct 2 ms 256 KB n = 8
24 Correct 2 ms 256 KB n = 8
25 Correct 2 ms 256 KB n = 8
26 Correct 2 ms 376 KB n = 8
27 Correct 2 ms 376 KB n = 8
28 Correct 2 ms 376 KB n = 8
29 Correct 2 ms 376 KB n = 16
30 Correct 6 ms 376 KB n = 16
31 Correct 2 ms 376 KB n = 16
32 Correct 2 ms 256 KB n = 16
33 Correct 2 ms 256 KB n = 16
34 Correct 2 ms 252 KB n = 16
35 Correct 2 ms 256 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 376 KB n = 16
40 Correct 2 ms 376 KB n = 9
41 Correct 2 ms 376 KB n = 16
42 Correct 2 ms 376 KB n = 16
43 Correct 2 ms 376 KB n = 16
44 Correct 2 ms 376 KB n = 9
45 Correct 2 ms 376 KB n = 15
46 Correct 2 ms 376 KB n = 16
47 Correct 2 ms 256 KB n = 16
48 Correct 2 ms 376 KB n = 16
49 Correct 215 ms 8288 KB n = 199999
50 Correct 233 ms 8304 KB n = 199991
51 Correct 233 ms 8296 KB n = 199993
52 Correct 158 ms 6408 KB n = 152076
53 Correct 96 ms 4076 KB n = 93249
54 Correct 191 ms 7884 KB n = 199910
55 Correct 194 ms 8296 KB n = 199999
56 Correct 187 ms 7784 KB n = 199997
57 Correct 185 ms 7248 KB n = 171294
58 Correct 149 ms 5980 KB n = 140872
59 Correct 206 ms 7816 KB n = 199886
60 Correct 199 ms 8936 KB n = 199996
61 Correct 193 ms 8588 KB n = 200000
62 Correct 218 ms 12776 KB n = 199998
63 Correct 216 ms 12624 KB n = 200000
64 Correct 247 ms 12776 KB n = 199998
65 Correct 236 ms 11436 KB n = 200000
66 Correct 206 ms 8112 KB n = 190000
67 Correct 185 ms 7380 KB n = 177777
68 Correct 101 ms 4352 KB n = 100000
69 Correct 217 ms 8392 KB n = 200000
70 Correct 260 ms 12868 KB n = 200000
71 Correct 269 ms 12876 KB n = 200000
72 Correct 255 ms 8292 KB n = 200000
73 Correct 222 ms 8296 KB n = 200000
74 Correct 231 ms 8456 KB n = 200000
75 Correct 207 ms 8296 KB n = 200000
76 Correct 206 ms 8360 KB n = 200000
77 Correct 187 ms 6828 KB n = 200000
78 Correct 213 ms 11240 KB n = 200000
79 Correct 200 ms 7656 KB n = 184307
80 Correct 76 ms 3436 KB n = 76040
81 Correct 186 ms 7920 KB n = 199981
82 Correct 200 ms 8908 KB n = 199994
83 Correct 186 ms 8424 KB n = 199996
84 Correct 213 ms 12740 KB n = 199998
85 Correct 214 ms 12672 KB n = 200000
86 Correct 227 ms 12836 KB n = 199998
87 Correct 211 ms 11496 KB n = 200000
88 Correct 230 ms 8780 KB n = 200000
89 Correct 208 ms 8300 KB n = 200000
90 Correct 217 ms 8296 KB n = 200000
91 Correct 259 ms 12928 KB n = 200000
92 Correct 253 ms 12776 KB n = 200000