Submission #1294724

#TimeUsernameProblemLanguageResultExecution timeMemory
1294724dooweySafety (NOI18_safety)C++20
100 / 100
132 ms19192 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define fastIO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); struct MySet{ ll b = 0; multiset<ll> si; void inc(ll x){ b += x; } void ins(ll x){ si.insert(x-b); } ll get_max(){ auto it = si.end(); --it; return *it+b; } ll get_min(){ auto it = si.begin(); return *it+b; } void pop_max(){ auto it = si.end(); --it; si.erase(it); } void pop_min(){ auto it = si.begin(); si.erase(it); } }; int main(){ fastIO; int n; ll h; cin >> n >> h; ll x; MySet L, R; ll res = 0; for(int i = 1; i <= n; i ++ ){ cin >> x; L.inc(-h); R.inc(h); if(i > 1){ ll lf = L.get_max(); ll rf = R.get_min(); if(x < lf) res += lf - x; else if(x > rf) res += x - rf; } L.ins(x); R.ins(x); while(L.get_max() > R.get_min()){ ll pi = L.get_max(); ll qi = R.get_min(); L.pop_max(); R.pop_min(); R.ins(pi); L.ins(qi); } } cout << res << "\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...