Submission #1137426

#TimeUsernameProblemLanguageResultExecution timeMemory
1137426gygRoller Coaster Railroad (IOI16_railroad)C++20
30 / 100
347 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; int 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}); int ans = 0; while (s_st.size()) { 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()) { ans -= s[i]; continue; } it--; int j = it->sec; t_st.erase(it); dsj.mrg(i, j); // cerr << j << " " << i << '\n'; } for (pii x : t_st) ans += x.fir; ans -= t_st.rbegin()->fir; return ans; } 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]; int ans = cmp(); return ans; }

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