#include <bits/stdc++.h>
using namespace std;
#define ll long long
struct DSU {
vector<int> p, r;
DSU(int n) : p(n), r(n) { iota(p.begin(), p.end(), 0); }
int find(int a) { return p[a] == a ? a : p[a] = find(p[a]); }
bool unite(int a, int b) {
a = find(a); b = find(b);
if (a == b) return false;
if (r[a] < r[b]) swap(a, b);
p[b] = a;
if (r[a] == r[b]) r[a]++;
return true;
}
};
ll plan_roller_coaster(vector<int> s, vector<int> t) {
int n = s.size();
vector<int> xs;
xs.reserve(2 * n + 1);
xs.push_back(1);
for (int v : s) xs.push_back(v);
for (int v : t) xs.push_back(v);
sort(xs.begin(), xs.end());
xs.erase(unique(xs.begin(), xs.end()), xs.end());
int m = xs.size();
vector<ll> diff(m + 1);
for (int i = 0; i < n; i++) {
int a = lower_bound(xs.begin(), xs.end(), s[i]) - xs.begin();
int b = lower_bound(xs.begin(), xs.end(), t[i]) - xs.begin();
diff[b]--;
diff[a]++;
}
int idx1 = lower_bound(xs.begin(), xs.end(), 1) - xs.begin();
diff[idx1]--;
vector<ll> bal(m - 1);
ll cur = 0;
for (int i = 0; i < m - 1; i++) {
cur += diff[i];
bal[i] = cur;
}
for (int i = 0; i < m - 1; i++) {
if (bal[i] > 0) return 1;
}
DSU dsu(m);
for (int i = 0; i < n; i++) {
int a = lower_bound(xs.begin(), xs.end(), s[i]) - xs.begin();
int b = lower_bound(xs.begin(), xs.end(), t[i]) - xs.begin();
dsu.unite(a, b);
}
for (int i = 0; i < m - 1; i++) {
if (bal[i] < 0) dsu.unite(i, i + 1);
}
int root = dsu.find(0);
for (int i = 1; i < m; i++) {
if (dsu.find(i) != root) return 1;
}
return 0;
}
컴파일 시 표준 에러 (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... |