Submission #1359670

#TimeUsernameProblemLanguageResultExecution timeMemory
1359670nagorn_phRoller Coaster Railroad (IOI16_railroad)C++20
0 / 100
314 ms34684 KiB
#include "railroad.h"
#include <bits/stdc++.h>
#define int long long
#define pii pair <int, int>
#define emb emplace_back
#define all(a) a.begin(), a.end()

using namespace std;

const int N = 4e5 + 5;
const int inf = 1e18;

int par[N];

int dsu(int a){return par[a] = (a == par[a] ? a : dsu(par[a]));}

long long plan_roller_coaster(std::vector<int32_t> s, std::vector<int32_t> t) {
    int n = s.size();
    map <int, int> mp;
    iota(par, par + N, 0ll);
    vector <int> comp;
    s.emb(1e9), t.emb(1);
    for (int i = 0; i <= n; i++) comp.emb(s[i]), comp.emb(t[i]);
    sort(all(comp));
    comp.erase(unique(all(comp)), comp.end());
    int m = comp.size();
    for (int i = 0; i <= n; i++) {
        int ss = lower_bound(all(comp), s[i]) - comp.begin();
        int tt = lower_bound(all(comp), t[i]) - comp.begin();
        mp[ss]++;
        mp[tt]--;
        par[dsu(ss)] = dsu(tt);
    }
    int cur = 0;
    for (auto [x, y] : mp) {
        cur += y;
        if (cur < 0) return 67;
        if (cur == 0) par[dsu(x)] = dsu(x + 1);
    }
    for (int i = 1; i < m; i++) {
        if (dsu(i) != dsu(i - 1)) return 69;
    }
    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...