Submission #1137391

#TimeUsernameProblemLanguageResultExecution timeMemory
1137391gygRoller Coaster Railroad (IOI16_railroad)C++20
30 / 100
218 ms33300 KiB
#include "railroad.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define arr array
#define vec vector
#define pii pair<int, int>
#define fir first 
#define sec second
#define ub upper_bound 
const int N = 2e5 + 5, INF = 1e18;

int n;
arr<int, N> s, t;

struct Dsj {
    arr<int, N> prnt;
    void intl() {
        for (int u = 0; u <= n; u++) prnt[u] = u;
    }
    int pr(int u) {
        return (prnt[u] == u) ? u : prnt[u] = pr(prnt[u]);
    }
    void mrg(int u, int v) {
        u = pr(u), v = pr(v);
        assert(u != v);
        prnt[v] = u;
    }
} dsj;
set<pii> s_st, t_st;
bool cmp() {
    dsj.intl();
    t_st.insert({1, 0});
    for (int i = 1; i <= n; i++)
        s_st.insert({s[i], i}), t_st.insert({t[i], i});
    
    while (s_st.size() > 1) {
        int i = s_st.begin()->sec; s_st.erase(s_st.begin());

        auto it = t_st.ub({s[i], INF});
        if (it != t_st.begin() && dsj.pr(next(it, -1)->sec) == dsj.pr(i)) it--;
        if (it == t_st.begin()) return false;
        it--;

        int j = it->sec; t_st.erase(it);
        dsj.mrg(i, j);
        // cerr << i << " " << j << '\n';
    }
    return true;
}

int plan_roller_coaster(vec<signed> _s, vec<signed> _t) {
    n = _s.size();
    for (int i = 1; i <= n; i++) s[i] = _s[i - 1], t[i] = _t[i - 1];

    bool ans = cmp();
    return ans ? 0 : 1;
}
 

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...