#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;
}
컴파일 시 표준 에러 (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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |