Submission #1293590

#TimeUsernameProblemLanguageResultExecution timeMemory
1293590baotoan655Roller Coaster Railroad (IOI16_railroad)C++20
0 / 100
114 ms10848 KiB
#include <bits/stdc++.h>
#define file(name)  if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
using namespace std;

const int inf = 1e9;
const int N = 4e5 + 5;
int fa[N], sz[N];
int root(int u) {
    if(u == fa[u]) return u;
    return fa[u] = root(fa[u]);
}
bool join(int u, int v) {
    u = root(u), v = root(v);
    if(u == v) return false;
    if(sz[u] < sz[v]) swap(u, v);
    sz[u] += sz[v];
    fa[v] = u;
    return true;
}
long long plan_roller_coaster(vector<int> s, vector<int> t) {
    int n = s.size();
    s.emplace_back(inf);
    t.emplace_back(1);
    vector<int> zip;
    long long ans = 0;
    for(int i = 0; i < n; ++i) {
        zip.emplace_back(s[i]);
        zip.emplace_back(t[i]);
    }
    sort(zip.begin(), zip.end());
    zip.resize(unique(zip.begin(), zip.end()) - zip.begin());
    int m = zip.size();
    vector<int> ps(m);
    for(int i = 0; i < m; ++i) fa[i] = i, sz[i] = 1;
    for(int i = 0; i < n; ++i) {
        s[i] = lower_bound(zip.begin(), zip.end(), s[i]) - zip.begin();
        t[i] = lower_bound(zip.begin(), zip.end(), t[i]) - zip.begin();
        ps[s[i]]++;
        ps[t[i]]--;
        join(s[i], t[i]);
    }
    int pref = 0;
    vector<pair<int, int>> ve;
    for(int i = 0; i < m - 1; ++i) {
        pref += ps[i];
        int d = zip[i + 1] - zip[i];
        ans += max(0LL, (long long) pref * d);
        if(pref != 0) join(i, i + 1);
        else {
            ve.emplace_back(d, i);
        }
    }
    sort(ve.begin(), ve.end());
    for(auto [w, u] : ve) {
        if(join(u, u + 1)) ans += w;
    }
    return ans;
}


//int main() {
//    ios_base::sync_with_stdio(false);
//    cin.tie(0), cout.tie(0);
//
//    file("A") else file("task");
//    int n;
//    cin >> n;
//    int s[n], t[n];
//    for(int i = 0; i < n; ++i) cin >> s[i] >> t[i];
//    cout << plan_roller_coaster(n, s, t) << '\n';
//    return 0;
//}

Compilation message (stderr)

railroad.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
railroad_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...