제출 #255575

#제출 시각아이디문제언어결과실행 시간메모리
255575MercenaryRoller Coaster Railroad (IOI16_railroad)C++14
100 / 100
218 ms15080 KiB
//#include "railroad.h"

#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/trie_policy.hpp>

#define pb push_back
#define mp make_pair
#define taskname "A"

using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
typedef double ld;
typedef pair<int,int> ii;
typedef tree <ii,null_type,less<ii>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;
const int maxn = 4e5 + 5;

int lab[maxn];
int sum[maxn];

vector<int> val;
int n;
int FindLab(int u){
    return lab[u] < 0 ? u : lab[u] = FindLab(lab[u]);
}
bool Merge(int u , int v){
    u = FindLab(u);v = FindLab(v);
    if(u == v)return 0;
    if(lab[u] > lab[v])swap(u , v);
    lab[u] += lab[v];
    lab[v] = u;
    return 1;
}
ll plan_roller_coaster(vector<int> s, vector<int> t) {
    memset(lab,-1,sizeof lab);
    ll res = 0;
    n = s.size();
    for(int i = 0 ; i < n ; ++i){
        val.pb(s[i]);val.pb(t[i]);
    }
    sort(val.begin(),val.end());val.erase(unique(val.begin(),val.end()),val.end());
    for(int i = 0 ; i < n ; ++i){
        s[i] = lower_bound(val.begin(),val.end(),s[i]) - val.begin();
        t[i] = lower_bound(val.begin(),val.end(),t[i]) - val.begin();
        Merge(s[i] , t[i]);
        sum[s[i]]++;sum[t[i]]--;
    }
    int cur = 1;
    vector<pair<int,int>> edges;
    for(int i = (int)val.size() - 1 ; i > 0 ; --i){
        cur += sum[i];
        if(cur < 0){
            res -= 1ll * cur * (val[i] - val[i - 1]);
            Merge(i,i-1);
        }else if(cur > 0)Merge(i,i-1);
        else if(cur == 0)edges.pb(mp(val[i] - val[i - 1] , i));
    }
    sort(edges.begin(),edges.end());
    for(auto & c : edges){
        if(Merge(c.second,c.second-1))res += c.first;
    }
    return res;
}


//int main()
//{
//    ios_base::sync_with_stdio(0);
//    cin.tie(0);
//    if(fopen(taskname".INP","r")){
//		freopen(taskname".INP", "r",stdin);
//		freopen(taskname".OUT", "w",stdout);
//    }
//
//}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...