Submission #1134295

#TimeUsernameProblemLanguageResultExecution timeMemory
1134295LuvidiSafety (NOI18_safety)C++20
100 / 100
225 ms20752 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long

int main(){
    ll n,h;
    cin>>n>>h;
    ll a[n+1];
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    multiset<ll> s1,s2;
    s1.insert(-1e9);
    s2.insert(1e9);
    ll m=0,x1=0,x2=0;
    for(int i=1;i<=n;i++){
        x1-=h;
        x2+=h;
        ll c=*s1.rbegin()+x1;
        if(a[i]>=c){
            s2.insert(a[i]-x2);
        }else{
            m+=c-a[i];
            s1.insert(a[i]-x1);
            s1.erase(s1.find(c-x1));
            s2.insert(c-x2);
        }
        c=*s2.begin()+x2;
        if(a[i]<=c){
            s1.insert(a[i]-x1);
        }else{
            m+=a[i]-c;
            s2.insert(a[i]-x2);
            s2.erase(s2.find(c-x2));
            s1.insert(c-x1);
        }
    }
    cout<<m<<'\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...