Submission #1135112

#TimeUsernameProblemLanguageResultExecution timeMemory
1135112AvianshSafety (NOI18_safety)C++20
100 / 100
122 ms19760 KiB
#include <bits/stdc++.h>

using namespace std;

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n,h;
    cin >> n >> h;
    int arr[n];
    int mxval = 0;
    for(int &i : arr){
        cin >> i;
        mxval=max(mxval,i);
    }
    multiset<long long>left,right;
    long long m = 1;
    long long c = -arr[0];
    left.insert(arr[0]);
    right.insert(arr[0]);
    long long lazl = 0;
    long long lazr=0;
    for(int i = 1;i<n;i++){
        lazl-=h;
        lazr+=h;
        long long lef = *(--left.end())+lazl;
        long long rig = *(right.begin())+lazr;
        //point addition:
        c-=arr[i];
        //expansion:
        c-=h*m;
        m++;
        if(lef<=arr[i]&&arr[i]<=rig){
            left.insert(arr[i]-lazl);
            right.insert(arr[i]-lazr);
            continue;
        }
        if(lef<=arr[i]){
            left.insert(rig-lazl);
            right.erase(right.begin());
            right.insert(arr[i]-lazr);
            right.insert(arr[i]-lazr);
        }
        else{
            right.insert(lef-lazr);
            left.erase(--left.end());
            left.insert(arr[i]-lazl);
            left.insert(arr[i]-lazl);
        }
    }
    for(long long i : right){
        c+=lazr+i;
    }
    cout << c;
    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...