#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 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... |
| # | 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... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |