#include "railroad.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int INF = 1'000'000'001;
// int main() {
//     int n;
//     assert(1 == scanf("%d", &n));
//     std::vector<int> s(n), t(n);
//     for (int i = 0; i < n; ++i)
//         assert(2 == scanf("%d%d", &s[i], &t[i]));
//     long long ans = plan_roller_coaster(s, t);
//     printf("%lld\n", ans);
//     return 0;
// }
void build(int n, vector<int> &in, int &len, vector<int> &seg) {
    len = 2 << __lg(n);
    seg.resize(2*len,INF);
    for (int i{0};i<n;i++) {
        seg[len+i] = in[i];
    }
    for (int i{len-1};i>=1;i--) {
        seg[i] = min(seg[2*i],seg[2*i+1]);
    }
}
void update(int &len, vector<int> &seg,int i, int v) {
    i += len;
    seg[i] = v;
    for (i/=2;i>=1;i/=2) {
        seg[i] = min(seg[2*i],seg[2*i+1]);
    }
}
int fmin(int &len, vector<int> &seg) {
    int i = 1;
    while (i < len) {
        if (seg[2*i] < seg[2*i + 1]) {
            i = 2*i;
        }
        else {
            i = 2*i + 1;
        }
    }
    return i - len;
}
long long plan_roller_coaster(std::vector<int> s, std::vector<int> t) {
    int n = (int) s.size()+1;
    s.push_back(INF);
    t.push_back(0);
    int len1{};
    int len2{};
    vector<int> seg1{};
    vector<int> seg2{};
    build(n,s,len1,seg1);
    build(n,t,len2,seg2);
    ll out = 0;
    for (int i{1};i<n;++i) {
        // cout << s[i] << " " << t[i] << "\n";
        int a = fmin(len1,seg1);
        update(len1,seg1,a,INF);
        update(len2,seg2,a,INF);
        int b = fmin(len2,seg2);
        out += max(0,t[b]-s[a]);
        update(len2,seg2,b,t[a]);
        t[b] = t[a];
        s[a] = INF;
        t[a] = INF;
    }
    return out;
}
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... |