#include "railroad.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int INF = 1e9;
const int maxn = 4e5 + 5;
int sz;
vector<int> vals = {-INF};
int dc(int x) {return lower_bound(vals.begin(), vals.end(), x) - vals.begin();}
int n;
vector<int> adj[maxn];
int sum[maxn];
int dsu[maxn];
int rt(int u) {
if (dsu[u] == u) return u;
return dsu[u] = rt(dsu[u]);
}
void merge(int u, int v) {
u = rt(u), v = rt(v);
if (u != v) dsu[u] = v;
}
bool vis[maxn];
void dfs(int u, int RT) {
vis[u] = true;
merge(u, RT);
for (int v:adj[u]) if (!vis[v]) dfs(v, RT);
}
long long plan_roller_coaster(vector<int32_t> s, vector<int32_t> t) {
s.push_back(INF); t.push_back(1);
n = s.size();
for (int i=0;i<n;i++) {
vals.push_back(s[i]); vals.push_back(t[i]);
}
sort(vals.begin(), vals.end());
vals.erase(unique(vals.begin(), vals.end()), vals.end());
sz = vals.size() - 1;
for (int i=0;i<n;i++) s[i] = dc(s[i]), t[i] = dc(t[i]);
for (int i=0;i<n;i++) adj[s[i]].push_back(t[i]);
for (int i=0;i<n;i++) sum[s[i]]++, sum[t[i]]--;
int ans = 0;
for (int i=sz;i>=1;i--) {
if (sum[i] < 0) {
adj[i].push_back(i-1);
ans -= sum[i] * (vals[i] - vals[i-1]);
} else if (sum[i] > 0) adj[i-1].push_back(i);
sum[i-1] += sum[i];
}
for (int i=1;i<=sz;i++) dsu[i] = i;
for (int i=1;i<=sz;i++) if (!vis[i]) dfs(i, i);
// for (int i=1;i<=sz;i++) cout << rt(i) << " "; cout << endl;
vector<pair<int,int>> vec;
for (int i=1;i<sz;i++) vec.push_back({vals[i+1] - vals[i], i});
sort(vec.begin(), vec.end());
for (auto [x, i]:vec) if (rt(i) != rt(i+1)) {
// cout << x << " " << i << endl;
merge(i, i+1);
ans += x;
}
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 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... |