Submission #1184131

#TimeUsernameProblemLanguageResultExecution timeMemory
1184131NamkhingSafety (NOI18_safety)C++20
100 / 100
33 ms5212 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

const int N = 2e5 + 10;
ll n, h, ans, lzl, lzr, a[N];
priority_queue<ll> pql;
priority_queue<ll, vector<ll>, greater<ll>> pqr;

int main() {
    cin.tie(nullptr)->ios_base::sync_with_stdio(false);
    cin >> n >> h;
    for (int i = 1; i <= n; i++) cin >> a[i];
    pql.push(a[1]);
    pqr.push(a[1]);
    for (int i = 2; i <= n; i++) {
        lzl += h;
        lzr += h;
        if (a[i] < pql.top() - lzl) {
            ll x = pql.top(); pql.pop();
            ans += x - lzl - a[i];
            pqr.push(x - lzl - lzr);
            pql.push(a[i] + lzl);
            pql.push(a[i] + lzl);
        }
        else if (a[i] > pqr.top() + lzr) {
            ll x = pqr.top(); pqr.pop();
            ans += a[i] - x - lzr;
            pql.push(x + lzl + lzr);
            pqr.push(a[i] - lzr);
            pqr.push(a[i] - lzr);
        }
        else {
            pql.push(a[i] + lzl);
            pqr.push(a[i] - lzr);
        }
    }
    cout << ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...