Submission #617117

#TimeUsernameProblemLanguageResultExecution timeMemory
617117Je_ORoller Coaster Railroad (IOI16_railroad)C++17
100 / 100
210 ms24656 KiB
#include "railroad.h"
#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define mp make_pair
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
typedef pair<int, ii> iii;

const int N = 2e5 + 5;
int par[N];

int find(int x){
    if(par[x] == x)return x;
    return par[x] = find(par[x]);
}

bool merge(int x, int y){
    x = find(x); y = find(y);
    if(x == y)return false;
    par[x] = y;
    return true;
}

ll plan_roller_coaster(vector<int> s, vector<int> t){
    int n = s.size();
    s.pb(1e9); t.pb(1);
    vector<iii> v;
    for(int i = 0; i <= n; ++i){
        v.pb(mp(s[i], mp(1, i)));
        v.pb(mp(t[i], mp(-1, i)));
    }
    sort(v.begin(), v.end());
    for(int i = 0; i <= n; ++i)par[i] = i;
    vector<iii> lst;
    ll ans = 0, cur = 0;
    for(int i = 0; i < v.size() - 1; ++i){
        cur += v[i].se.fi;
        ans += max(0LL, (ll)cur) * (v[i + 1].fi - v[i].fi);
        lst.pb(mp(v[i + 1].fi - v[i].fi, mp(v[i].se.se, v[i + 1].se.se)));
        if(v[i + 1].fi == v[i].fi || cur != 0){
            merge(v[i].se.se, v[i + 1].se.se);
        }
    }
    sort(lst.begin(), lst.end());
    for(int i = 0; i < lst.size(); ++i){
        if(merge(lst[i].se.fi, lst[i].se.se)){
            ans += lst[i].fi;
        }
    }
    return ans;
}

Compilation message (stderr)

railroad.cpp: In function 'll plan_roller_coaster(std::vector<int>, std::vector<int>)':
railroad.cpp:39:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, std::pair<int, int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   39 |     for(int i = 0; i < v.size() - 1; ++i){
      |                    ~~^~~~~~~~~~~~~~
railroad.cpp:48:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, std::pair<int, int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   48 |     for(int i = 0; i < lst.size(); ++i){
      |                    ~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...