답안 #209859

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
209859 2020-03-15T18:03:27 Z alexandra_udristoiu Roller Coaster Railroad (IOI16_railroad) C++14
100 / 100
275 ms 16792 KB
#include<iostream>
#include<vector>
#include<algorithm>
#include "railroad.h"
#define DIM 400005
using namespace std;
static int w[DIM], st[DIM], dr[DIM], r[DIM];
static pair<int, int> c[DIM];
int cautbin(int x, int n){
    int st = 1, dr = n, mid;
    while(st <= dr){
        mid = (st + dr) / 2;
        if(w[mid] == x){
            return mid;
        }
        if(w[mid] < x){
            st = mid + 1;
        }
        else{
            dr = mid - 1;
        }
    }
}
int rad(int x){
    while(r[x] > 0){
        x = r[x];
    }
    return x;
}
void uneste(int x, int y){
    int r1 = rad(x), r2 = rad(y);
    if(r1 != r2){
        if(r[r1] < r[r2]){
            r[r1] += r[r2];
            r[r2] = r1;
        }
        else{
            r[r2] += r[r1];
            r[r1] = r2;
        }
    }
}
long long plan_roller_coaster(vector<int> s, vector<int> t) {
    int n, i, nr, m;
    long long sol = 0;
    s.push_back(1000000001);
    t.push_back(1);
    n = (int) s.size();
    for(i = 0; i < n; i++){
        w[2 * i + 1] = s[i];
        w[2 * i + 2] = t[i];
    }
    sort(w + 1, w + 2 * n + 1);
    nr = 1;
    for(i = 2; i <= n + n; i++){
        if(w[i] != w[nr]){
            w[++nr] = w[i];
        }
    }
    for(i = 1; i <= nr; i++){
        r[i] = -1;
    }
    for(i = 0; i < n; i++){
        s[i] = cautbin(s[i], nr);
        t[i] = cautbin(t[i], nr);
        if(s[i] < t[i]){
            st[ s[i] ]++;
            st[ t[i] ]--;
        }
        else{
            dr[ t[i] ]++;
            dr[ s[i] ]--;
        }
        uneste(s[i], t[i]);
    }
    for(i = 1; i <= nr; i++){
        st[i] += st[i - 1];
        dr[i] += dr[i - 1];
    }
    for(i = 1; i < nr; i++){
        if(st[i] > dr[i]){
            sol += (st[i] - dr[i]) * 1LL * (w[i + 1] - w[i]);
        }
        if(st[i] != dr[i]){
            uneste(i, i + 1);
        }
        c[i] = make_pair(w[i + 1] - w[i], i);
    }
    sort(c, c + nr);
    for(i = 1; i < nr; i++){
        if(rad(c[i].second) != rad(c[i].second + 1) ){
            sol += c[i].first;
            uneste(c[i].second, c[i].second + 1);
        }
    }
    return sol;
}

Compilation message

railroad.cpp: In function 'long long int plan_roller_coaster(std::vector<int>, std::vector<int>)':
railroad.cpp:44:19: warning: unused variable 'm' [-Wunused-variable]
     int n, i, nr, m;
                   ^
railroad.cpp: In function 'int cautbin(int, int)':
railroad.cpp:23:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 376 KB n = 2
2 Correct 4 ms 376 KB n = 2
3 Correct 5 ms 376 KB n = 2
4 Correct 5 ms 376 KB n = 2
5 Correct 5 ms 376 KB n = 2
6 Correct 5 ms 376 KB n = 2
7 Correct 4 ms 376 KB n = 3
8 Correct 5 ms 376 KB n = 3
9 Correct 5 ms 376 KB n = 3
10 Correct 5 ms 376 KB n = 8
11 Correct 5 ms 376 KB n = 8
12 Correct 5 ms 376 KB n = 8
13 Correct 5 ms 376 KB n = 8
14 Correct 5 ms 376 KB n = 8
15 Correct 5 ms 376 KB n = 8
16 Correct 5 ms 376 KB n = 8
17 Correct 4 ms 376 KB n = 8
18 Correct 4 ms 376 KB n = 8
19 Correct 5 ms 376 KB n = 3
20 Correct 5 ms 376 KB n = 7
21 Correct 5 ms 376 KB n = 8
22 Correct 5 ms 376 KB n = 8
23 Correct 5 ms 376 KB n = 8
24 Correct 5 ms 376 KB n = 8
25 Correct 5 ms 380 KB n = 8
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 376 KB n = 2
2 Correct 4 ms 376 KB n = 2
3 Correct 5 ms 376 KB n = 2
4 Correct 5 ms 376 KB n = 2
5 Correct 5 ms 376 KB n = 2
6 Correct 5 ms 376 KB n = 2
7 Correct 4 ms 376 KB n = 3
8 Correct 5 ms 376 KB n = 3
9 Correct 5 ms 376 KB n = 3
10 Correct 5 ms 376 KB n = 8
11 Correct 5 ms 376 KB n = 8
12 Correct 5 ms 376 KB n = 8
13 Correct 5 ms 376 KB n = 8
14 Correct 5 ms 376 KB n = 8
15 Correct 5 ms 376 KB n = 8
16 Correct 5 ms 376 KB n = 8
17 Correct 4 ms 376 KB n = 8
18 Correct 4 ms 376 KB n = 8
19 Correct 5 ms 376 KB n = 3
20 Correct 5 ms 376 KB n = 7
21 Correct 5 ms 376 KB n = 8
22 Correct 5 ms 376 KB n = 8
23 Correct 5 ms 376 KB n = 8
24 Correct 5 ms 376 KB n = 8
25 Correct 5 ms 380 KB n = 8
26 Correct 5 ms 376 KB n = 8
27 Correct 5 ms 376 KB n = 8
28 Correct 5 ms 376 KB n = 8
29 Correct 5 ms 376 KB n = 16
30 Correct 4 ms 376 KB n = 16
31 Correct 4 ms 376 KB n = 16
32 Correct 5 ms 376 KB n = 16
33 Correct 4 ms 376 KB n = 16
34 Correct 5 ms 376 KB n = 16
35 Correct 4 ms 376 KB n = 16
36 Correct 5 ms 376 KB n = 15
37 Correct 5 ms 376 KB n = 8
38 Correct 4 ms 376 KB n = 16
39 Correct 5 ms 376 KB n = 16
40 Correct 5 ms 376 KB n = 9
41 Correct 4 ms 376 KB n = 16
42 Correct 5 ms 376 KB n = 16
43 Correct 5 ms 376 KB n = 16
44 Correct 5 ms 376 KB n = 9
45 Correct 5 ms 376 KB n = 15
46 Correct 5 ms 376 KB n = 16
47 Correct 4 ms 376 KB n = 16
48 Correct 4 ms 376 KB n = 16
# 결과 실행 시간 메모리 Grader output
1 Correct 247 ms 12908 KB n = 199999
2 Correct 275 ms 16792 KB n = 199991
3 Correct 248 ms 16728 KB n = 199993
4 Correct 186 ms 12496 KB n = 152076
5 Correct 113 ms 7832 KB n = 93249
6 Correct 216 ms 14208 KB n = 199910
7 Correct 240 ms 15832 KB n = 199999
8 Correct 218 ms 14296 KB n = 199997
9 Correct 217 ms 14264 KB n = 171294
10 Correct 175 ms 11944 KB n = 140872
11 Correct 220 ms 14296 KB n = 199886
12 Correct 238 ms 15960 KB n = 199996
13 Correct 219 ms 14680 KB n = 200000
14 Correct 228 ms 15832 KB n = 199998
15 Correct 230 ms 15576 KB n = 200000
16 Correct 242 ms 16216 KB n = 199998
17 Correct 244 ms 16728 KB n = 200000
18 Correct 241 ms 15908 KB n = 190000
19 Correct 213 ms 14984 KB n = 177777
20 Correct 117 ms 8552 KB n = 100000
21 Correct 245 ms 16728 KB n = 200000
22 Correct 239 ms 16732 KB n = 200000
23 Correct 253 ms 16728 KB n = 200000
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 376 KB n = 2
2 Correct 4 ms 376 KB n = 2
3 Correct 5 ms 376 KB n = 2
4 Correct 5 ms 376 KB n = 2
5 Correct 5 ms 376 KB n = 2
6 Correct 5 ms 376 KB n = 2
7 Correct 4 ms 376 KB n = 3
8 Correct 5 ms 376 KB n = 3
9 Correct 5 ms 376 KB n = 3
10 Correct 5 ms 376 KB n = 8
11 Correct 5 ms 376 KB n = 8
12 Correct 5 ms 376 KB n = 8
13 Correct 5 ms 376 KB n = 8
14 Correct 5 ms 376 KB n = 8
15 Correct 5 ms 376 KB n = 8
16 Correct 5 ms 376 KB n = 8
17 Correct 4 ms 376 KB n = 8
18 Correct 4 ms 376 KB n = 8
19 Correct 5 ms 376 KB n = 3
20 Correct 5 ms 376 KB n = 7
21 Correct 5 ms 376 KB n = 8
22 Correct 5 ms 376 KB n = 8
23 Correct 5 ms 376 KB n = 8
24 Correct 5 ms 376 KB n = 8
25 Correct 5 ms 380 KB n = 8
26 Correct 5 ms 376 KB n = 8
27 Correct 5 ms 376 KB n = 8
28 Correct 5 ms 376 KB n = 8
29 Correct 5 ms 376 KB n = 16
30 Correct 4 ms 376 KB n = 16
31 Correct 4 ms 376 KB n = 16
32 Correct 5 ms 376 KB n = 16
33 Correct 4 ms 376 KB n = 16
34 Correct 5 ms 376 KB n = 16
35 Correct 4 ms 376 KB n = 16
36 Correct 5 ms 376 KB n = 15
37 Correct 5 ms 376 KB n = 8
38 Correct 4 ms 376 KB n = 16
39 Correct 5 ms 376 KB n = 16
40 Correct 5 ms 376 KB n = 9
41 Correct 4 ms 376 KB n = 16
42 Correct 5 ms 376 KB n = 16
43 Correct 5 ms 376 KB n = 16
44 Correct 5 ms 376 KB n = 9
45 Correct 5 ms 376 KB n = 15
46 Correct 5 ms 376 KB n = 16
47 Correct 4 ms 376 KB n = 16
48 Correct 4 ms 376 KB n = 16
49 Correct 247 ms 12908 KB n = 199999
50 Correct 275 ms 16792 KB n = 199991
51 Correct 248 ms 16728 KB n = 199993
52 Correct 186 ms 12496 KB n = 152076
53 Correct 113 ms 7832 KB n = 93249
54 Correct 216 ms 14208 KB n = 199910
55 Correct 240 ms 15832 KB n = 199999
56 Correct 218 ms 14296 KB n = 199997
57 Correct 217 ms 14264 KB n = 171294
58 Correct 175 ms 11944 KB n = 140872
59 Correct 220 ms 14296 KB n = 199886
60 Correct 238 ms 15960 KB n = 199996
61 Correct 219 ms 14680 KB n = 200000
62 Correct 228 ms 15832 KB n = 199998
63 Correct 230 ms 15576 KB n = 200000
64 Correct 242 ms 16216 KB n = 199998
65 Correct 244 ms 16728 KB n = 200000
66 Correct 241 ms 15908 KB n = 190000
67 Correct 213 ms 14984 KB n = 177777
68 Correct 117 ms 8552 KB n = 100000
69 Correct 245 ms 16728 KB n = 200000
70 Correct 239 ms 16732 KB n = 200000
71 Correct 253 ms 16728 KB n = 200000
72 Correct 249 ms 16728 KB n = 200000
73 Correct 259 ms 16728 KB n = 200000
74 Correct 248 ms 16728 KB n = 200000
75 Correct 244 ms 16728 KB n = 200000
76 Correct 241 ms 16728 KB n = 200000
77 Correct 193 ms 12888 KB n = 200000
78 Correct 200 ms 12888 KB n = 200000
79 Correct 236 ms 15324 KB n = 184307
80 Correct 95 ms 6560 KB n = 76040
81 Correct 218 ms 14296 KB n = 199981
82 Correct 233 ms 15960 KB n = 199994
83 Correct 218 ms 14680 KB n = 199996
84 Correct 227 ms 15828 KB n = 199998
85 Correct 227 ms 15576 KB n = 200000
86 Correct 241 ms 16216 KB n = 199998
87 Correct 245 ms 16728 KB n = 200000
88 Correct 255 ms 16728 KB n = 200000
89 Correct 240 ms 16728 KB n = 200000
90 Correct 275 ms 16728 KB n = 200000
91 Correct 246 ms 16728 KB n = 200000
92 Correct 258 ms 16728 KB n = 200000