Submission #1043037

#TimeUsernameProblemLanguageResultExecution timeMemory
1043037Aldas25Safety (NOI18_safety)C++14
100 / 100
56 ms7168 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN = 2e5 + 100; int n; ll h; priority_queue<ll> pqLeft; priority_queue<ll, vector<ll>, greater<ll>> pqRight; ll ans = 0; ll a[MAXN]; int main() { cin >> n >> h; for (int i = 0; i < n; i++) cin >> a[i]; pqLeft.push(a[0]); pqRight.push(a[0]); for (int i = 1; i < n; i++) { ll range = ((ll)i) * h; // mimic shifting left side by -h, and right side by h // minimum area in graph is interval [pqLeft.top() - range; pqRight.top() + range] ll minFrom = pqLeft.top() - range; ll minTo = pqRight.top() + range; if (a[i] < minFrom) { pqLeft.push(a[i] + range); pqLeft.push(a[i] + range); ans += minFrom - a[i]; pqRight.push(pqLeft.top() - 2*range); pqLeft.pop(); } else if (a[i] > minTo) { pqRight.push(a[i] - range); pqRight.push(a[i] - range); ans += a[i] - minTo; pqLeft.push(pqRight.top() + 2*range); pqRight.pop(); } else { pqLeft.push(a[i] + range); pqRight.push(a[i] - range); } } cout << ans << "\n"; return 0; }
#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...