Submission #957244

#TimeUsernameProblemLanguageResultExecution timeMemory
957244smjun04Safety (NOI18_safety)C++17
100 / 100
42 ms7076 KiB
#include <bits/stdc++.h>
using namespace std;

#ifdef LOCAL
constexpr bool local = true;
#else
constexpr bool local = false;
#endif

#define FASTIO ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
#define ll long long

#define debug if constexpr (local) std::cout
#define endl '\n'

int main() {
	FASTIO
    ll n, h; cin >> n >> h;
    vector<ll> v(n);
    for (int i = 0; i < n; i++) cin >> v[i];
    
    ll res = 0;
    priority_queue<ll> l;
    priority_queue<ll, vector<ll>, greater<ll>> r;
    l.push(v[0]); r.push(v[0]);
    
    for (int i = 1; i < n; i++){
    	int lopt = l.top() - i*h, ropt = r.top() + i*h;
    	if (v[i] < lopt){
    		res += lopt - v[i];
    		r.push(lopt-i*h);
    		l.push(v[i]+i*h); l.push(v[i]+i*h); l.pop();
		}
		else if (ropt < v[i]){
			res += v[i] - ropt;
			l.push(ropt+i*h);
			r.push(v[i]-i*h); r.push(v[i]-i*h); r.pop();
		}
		else{
			l.push(v[i]+i*h);
			r.push(v[i]-i*h);
		}
	}
	
	cout << res;
}
#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...