Submission #319756

#TimeUsernameProblemLanguageResultExecution timeMemory
319756kostia244Safety (NOI18_safety)C++17
100 / 100
321 ms21304 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; const int inf = 1<<30; struct sset : public multiset<ll> { ll bias = 0; void insert(int x) { multiset<ll>::insert(x-bias); } ll get_min() { return *begin() + bias; } void pop_min() { erase(find(*begin())); } ll get_max() { return *rbegin() + bias; } void pop_max() { erase(find(*rbegin())); } void add(ll x) { bias += x; } }; int main() { cin.tie(0)->sync_with_stdio(0); ll n, h, x; sset L, R; cin >> n >> h >> x; L.insert(x); R.insert(x); ll ans = 0; for(int I = 1; I < n; I++) { R.add(h); L.add(-h); cin >> x; if(x <= L.get_max()) { L.insert(x); L.insert(x); ans += abs(L.get_max()-x); R.insert(L.get_max()); L.pop_max(); } else { R.insert(x); R.insert(x); ans += abs(R.get_min()-x); L.insert(R.get_min()); R.pop_min(); } } cout << ans << '\n'; }
#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...