#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int p[400400];
int find(int x) { return x == p[x] ? x : p[x] = find(p[x]); }
int merge(int x, int y) {
if((x = find(x)) == (y = find(y))) return 0;
p[x] = y;
return 1;
}
ll plan_roller_coaster(vector<int> s, vector<int> t) {
s.push_back(1e9), t.push_back(1);
int n = s.size();
vector<int> V;
for(int i=0;i<n;i++) V.push_back(s[i]), V.push_back(t[i]);
sort(V.begin(), V.end());
V.erase(unique(V.begin(), V.end()), V.end());
for(int i=0;i<n;i++) s[i] = lower_bound(V.begin(), V.end(), s[i]) - V.begin() + 1;
for(int i=0;i<n;i++) t[i] = lower_bound(V.begin(), V.end(), t[i]) - V.begin() + 1;
vector<array<int, 3>> e;
int m = V.size();
vector<int> S(m+1, 0);
for(int i=0;i<n;i++) S[s[i]]++, S[t[i]]--, e.push_back({0, s[i], t[i]});
ll ans = 0;
for(int i=1;i<m;i++) {
S[i] += S[i-1];
if(S[i] > 0) ans += (V[i]-V[i-1]) * S[i];
e.push_back({S[i] ? 0 : 2*(V[i]-V[i-1]), i, i+1});
}
iota(p+1, p+1+m, 1);
sort(e.begin(), e.end());
for(auto [z, x, y] : e) if(merge(x, y)) ans += z;
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... |