답안 #243748

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
243748 2020-07-01T18:26:54 Z thebes Roller Coaster Railroad (IOI16_railroad) C++14
100 / 100
963 ms 36076 KB
#include "railroad.h"
#include <bits/stdc++.h>
#define DEBUG 1
using namespace std;

namespace output{
    void __(short x){cout<<x;}
    void __(unsigned x){cout<<x;}
    void __(int x){cout<<x;}
    void __(long long x){cout<<x;}
    void __(unsigned long long x){cout<<x;}
    void __(double x){cout<<x;}
    void __(long double x){cout<<x;}
    void __(char x){cout<<x;}
    void __(const char*x){cout<<x;}
    void __(const string&x){cout<<x;}
    void __(bool x){cout<<(x?"true":"false");}
    template<class S,class T>
    void __(const pair<S,T>&x){__(DEBUG?"(":""),__(x.first),__(DEBUG?", ":" "),__(x.second),__(DEBUG?")":"");}
    template<class T>
    void __(const vector<T>&x){__(DEBUG?"{":"");bool _=0;for(const auto&v:x)__(_?DEBUG?", ":" ":""),__(v),_=1;__(DEBUG?"}":"");}
    template<class T>
    void __(const set<T>&x){__(DEBUG?"{":"");bool _=0;for(const auto&v:x)__(_?DEBUG?", ":" ":""),__(v),_=1;__(DEBUG?"}":"");}
    template<class T>
    void __(const multiset<T>&x){__(DEBUG?"{":"");bool _=0;for(const auto&v:x)__(_?DEBUG?", ":" ":""),__(v),_=1;__(DEBUG?"}":"");}
    template<class S,class T>
    void __(const map<S,T>&x){__(DEBUG?"{":"");bool _=0;for(const auto&v:x)__(_?DEBUG?", ":" ":""),__(v),_=1;__(DEBUG?"}":"");}
    void pr(){cout<<"\n";}
    template<class S,class... T>
    void pr(const S&a,const T&...b){__(a);if(sizeof...(b))__(' ');pr(b...);}
}

using namespace output;

typedef long long ll;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<int,char> pic;
typedef pair<double,double> pdd;
typedef pair<ld,ld> pld;
typedef vector<int> vi;
typedef vector<ll> vl;

#define pb push_back
#define eb emplace_back
#define fox(i,x,y) for(int i=(x);i<=(y);i++)
#define foxr(i,x,y) for(int i=(y);i>=(x);i--)
#define F first
#define S second

const int MN = 2e5+5;
int N, i, j, x, y, ds[2*MN], rev[2*MN], cur, nxt;
pii evt[2*MN]; ll ans; map<int,int> mp;
int fnd(int x){return ds[x]=x==ds[x]?x:fnd(ds[x]);}
struct edge{int x,y,w;};vector<edge> vec;

ll plan_roller_coaster(vi s, vi t){
    s.pb(1e9+7); t.pb(0);
    N = (int)s.size();
    for(i=0;i<N;i++){
        evt[2*i+1]={s[i],0};
        evt[2*i+2]={t[i],1};
        mp[s[i]]=mp[t[i]]=0;
    }
    for(auto it=mp.begin();it!=mp.end();it++)
        it->second = ++nxt, rev[nxt] = it->first;
    for(i=1;i<=nxt;i++) ds[i]=i;
    sort(evt+1,evt+2*N+1,[](pii i,pii j){return i.F<j.F;});
    for(i=1;i<=2*N;i++){
        if(!evt[i].S) cur--;
        else cur++;
        if(i+1<=2*N){
            if(cur<0){
                ans += -1LL*cur*(evt[i+1].F-evt[i].F);
                if(fnd(mp[evt[i].F])!=fnd(mp[evt[i+1].F]))
                    ds[fnd(mp[evt[i].F])]=fnd(mp[evt[i+1].F]);
            }
            else if(cur>0&&fnd(mp[evt[i].F])!=fnd(mp[evt[i+1].F]))
                ds[fnd(mp[evt[i].F])]=fnd(mp[evt[i+1].F]);
        }
    }
    for(i=0;i<N;i++){
        x=fnd(mp[s[i]]), y=fnd(mp[t[i]]);
        if(x!=y) ds[x]=y;
    }
    for(i=1;i<nxt;i++){
        if(fnd(i)!=fnd(i+1))
            vec.pb({i,i+1,rev[i+1]-rev[i]});
    }
    sort(vec.begin(),vec.end(),[](edge i,edge j){return i.w<j.w;});
    for(auto v : vec){
        x=v.x, y=v.y;
        if(fnd(x)!=fnd(y)){
            ds[fnd(x)]=fnd(y);
            ans += v.w;
        }
    }
    return ans;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 384 KB n = 2
2 Correct 4 ms 384 KB n = 2
3 Correct 4 ms 384 KB n = 2
4 Correct 4 ms 256 KB n = 2
5 Correct 4 ms 384 KB n = 2
6 Correct 4 ms 384 KB n = 2
7 Correct 5 ms 384 KB n = 3
8 Correct 4 ms 384 KB n = 3
9 Correct 5 ms 384 KB n = 3
10 Correct 5 ms 384 KB n = 8
11 Correct 5 ms 384 KB n = 8
12 Correct 4 ms 256 KB n = 8
13 Correct 4 ms 384 KB n = 8
14 Correct 4 ms 384 KB n = 8
15 Correct 4 ms 384 KB n = 8
16 Correct 5 ms 304 KB n = 8
17 Correct 4 ms 384 KB n = 8
18 Correct 4 ms 384 KB n = 8
19 Correct 4 ms 384 KB n = 3
20 Correct 5 ms 384 KB n = 7
21 Correct 4 ms 384 KB n = 8
22 Correct 4 ms 256 KB n = 8
23 Correct 4 ms 384 KB n = 8
24 Correct 4 ms 384 KB n = 8
25 Correct 4 ms 384 KB n = 8
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 384 KB n = 2
2 Correct 4 ms 384 KB n = 2
3 Correct 4 ms 384 KB n = 2
4 Correct 4 ms 256 KB n = 2
5 Correct 4 ms 384 KB n = 2
6 Correct 4 ms 384 KB n = 2
7 Correct 5 ms 384 KB n = 3
8 Correct 4 ms 384 KB n = 3
9 Correct 5 ms 384 KB n = 3
10 Correct 5 ms 384 KB n = 8
11 Correct 5 ms 384 KB n = 8
12 Correct 4 ms 256 KB n = 8
13 Correct 4 ms 384 KB n = 8
14 Correct 4 ms 384 KB n = 8
15 Correct 4 ms 384 KB n = 8
16 Correct 5 ms 304 KB n = 8
17 Correct 4 ms 384 KB n = 8
18 Correct 4 ms 384 KB n = 8
19 Correct 4 ms 384 KB n = 3
20 Correct 5 ms 384 KB n = 7
21 Correct 4 ms 384 KB n = 8
22 Correct 4 ms 256 KB n = 8
23 Correct 4 ms 384 KB n = 8
24 Correct 4 ms 384 KB n = 8
25 Correct 4 ms 384 KB n = 8
26 Correct 4 ms 384 KB n = 8
27 Correct 4 ms 384 KB n = 8
28 Correct 4 ms 384 KB n = 8
29 Correct 4 ms 384 KB n = 16
30 Correct 5 ms 384 KB n = 16
31 Correct 4 ms 384 KB n = 16
32 Correct 4 ms 384 KB n = 16
33 Correct 5 ms 384 KB n = 16
34 Correct 5 ms 384 KB n = 16
35 Correct 4 ms 384 KB n = 16
36 Correct 5 ms 384 KB n = 15
37 Correct 4 ms 384 KB n = 8
38 Correct 5 ms 384 KB n = 16
39 Correct 4 ms 384 KB n = 16
40 Correct 5 ms 384 KB n = 9
41 Correct 4 ms 384 KB n = 16
42 Correct 5 ms 384 KB n = 16
43 Correct 5 ms 384 KB n = 16
44 Correct 5 ms 384 KB n = 9
45 Correct 4 ms 384 KB n = 15
46 Correct 5 ms 384 KB n = 16
47 Correct 5 ms 384 KB n = 16
48 Correct 5 ms 384 KB n = 16
# 결과 실행 시간 메모리 Grader output
1 Correct 920 ms 30972 KB n = 199999
2 Correct 954 ms 33436 KB n = 199991
3 Correct 934 ms 32344 KB n = 199993
4 Correct 620 ms 23764 KB n = 152076
5 Correct 315 ms 15768 KB n = 93249
6 Correct 739 ms 27352 KB n = 199910
7 Correct 797 ms 31472 KB n = 199999
8 Correct 711 ms 27536 KB n = 199997
9 Correct 730 ms 26936 KB n = 171294
10 Correct 563 ms 22184 KB n = 140872
11 Correct 750 ms 24920 KB n = 199886
12 Correct 729 ms 28448 KB n = 199996
13 Correct 691 ms 25688 KB n = 200000
14 Correct 655 ms 29528 KB n = 199998
15 Correct 701 ms 29144 KB n = 200000
16 Correct 675 ms 29912 KB n = 199998
17 Correct 758 ms 32088 KB n = 200000
18 Correct 715 ms 27688 KB n = 190000
19 Correct 627 ms 28168 KB n = 177777
20 Correct 315 ms 14696 KB n = 100000
21 Correct 790 ms 28760 KB n = 200000
22 Correct 799 ms 31832 KB n = 200000
23 Correct 943 ms 28632 KB n = 200000
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 384 KB n = 2
2 Correct 4 ms 384 KB n = 2
3 Correct 4 ms 384 KB n = 2
4 Correct 4 ms 256 KB n = 2
5 Correct 4 ms 384 KB n = 2
6 Correct 4 ms 384 KB n = 2
7 Correct 5 ms 384 KB n = 3
8 Correct 4 ms 384 KB n = 3
9 Correct 5 ms 384 KB n = 3
10 Correct 5 ms 384 KB n = 8
11 Correct 5 ms 384 KB n = 8
12 Correct 4 ms 256 KB n = 8
13 Correct 4 ms 384 KB n = 8
14 Correct 4 ms 384 KB n = 8
15 Correct 4 ms 384 KB n = 8
16 Correct 5 ms 304 KB n = 8
17 Correct 4 ms 384 KB n = 8
18 Correct 4 ms 384 KB n = 8
19 Correct 4 ms 384 KB n = 3
20 Correct 5 ms 384 KB n = 7
21 Correct 4 ms 384 KB n = 8
22 Correct 4 ms 256 KB n = 8
23 Correct 4 ms 384 KB n = 8
24 Correct 4 ms 384 KB n = 8
25 Correct 4 ms 384 KB n = 8
26 Correct 4 ms 384 KB n = 8
27 Correct 4 ms 384 KB n = 8
28 Correct 4 ms 384 KB n = 8
29 Correct 4 ms 384 KB n = 16
30 Correct 5 ms 384 KB n = 16
31 Correct 4 ms 384 KB n = 16
32 Correct 4 ms 384 KB n = 16
33 Correct 5 ms 384 KB n = 16
34 Correct 5 ms 384 KB n = 16
35 Correct 4 ms 384 KB n = 16
36 Correct 5 ms 384 KB n = 15
37 Correct 4 ms 384 KB n = 8
38 Correct 5 ms 384 KB n = 16
39 Correct 4 ms 384 KB n = 16
40 Correct 5 ms 384 KB n = 9
41 Correct 4 ms 384 KB n = 16
42 Correct 5 ms 384 KB n = 16
43 Correct 5 ms 384 KB n = 16
44 Correct 5 ms 384 KB n = 9
45 Correct 4 ms 384 KB n = 15
46 Correct 5 ms 384 KB n = 16
47 Correct 5 ms 384 KB n = 16
48 Correct 5 ms 384 KB n = 16
49 Correct 920 ms 30972 KB n = 199999
50 Correct 954 ms 33436 KB n = 199991
51 Correct 934 ms 32344 KB n = 199993
52 Correct 620 ms 23764 KB n = 152076
53 Correct 315 ms 15768 KB n = 93249
54 Correct 739 ms 27352 KB n = 199910
55 Correct 797 ms 31472 KB n = 199999
56 Correct 711 ms 27536 KB n = 199997
57 Correct 730 ms 26936 KB n = 171294
58 Correct 563 ms 22184 KB n = 140872
59 Correct 750 ms 24920 KB n = 199886
60 Correct 729 ms 28448 KB n = 199996
61 Correct 691 ms 25688 KB n = 200000
62 Correct 655 ms 29528 KB n = 199998
63 Correct 701 ms 29144 KB n = 200000
64 Correct 675 ms 29912 KB n = 199998
65 Correct 758 ms 32088 KB n = 200000
66 Correct 715 ms 27688 KB n = 190000
67 Correct 627 ms 28168 KB n = 177777
68 Correct 315 ms 14696 KB n = 100000
69 Correct 790 ms 28760 KB n = 200000
70 Correct 799 ms 31832 KB n = 200000
71 Correct 943 ms 28632 KB n = 200000
72 Correct 944 ms 31748 KB n = 200000
73 Correct 923 ms 32316 KB n = 200000
74 Correct 963 ms 34648 KB n = 200000
75 Correct 737 ms 36076 KB n = 200000
76 Correct 774 ms 35160 KB n = 200000
77 Correct 464 ms 23896 KB n = 200000
78 Correct 432 ms 24664 KB n = 200000
79 Correct 828 ms 32532 KB n = 184307
80 Correct 245 ms 15008 KB n = 76040
81 Correct 760 ms 27668 KB n = 199981
82 Correct 747 ms 31436 KB n = 199994
83 Correct 688 ms 28552 KB n = 199996
84 Correct 645 ms 32600 KB n = 199998
85 Correct 660 ms 32216 KB n = 200000
86 Correct 666 ms 33116 KB n = 199998
87 Correct 734 ms 36056 KB n = 200000
88 Correct 757 ms 33244 KB n = 200000
89 Correct 735 ms 35672 KB n = 200000
90 Correct 785 ms 32600 KB n = 200000
91 Correct 791 ms 35800 KB n = 200000
92 Correct 867 ms 32532 KB n = 200000