Submission #1363179

#TimeUsernameProblemLanguageResultExecution timeMemory
1363179ereringSafety (NOI18_safety)C++20
100 / 100
150 ms20712 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define pb push_back
const int N=1e5+5,MAXA=1e6+5,inf=2e9+5,MOD=982451653;
multiset<int> lef,rig;
int mn,shl=0,shr=0;
void insert(int A){
    if (A >= *rig.begin()+shr) {
        mn += A - (*rig.begin()+shr);
        lef.insert(*rig.begin()+shr-shl);
        rig.extract(rig.begin());
        rig.insert(A-shr);
        rig.insert(A-shr);
    }
    else if (A <= *lef.rbegin()+shl) {
        mn += *lef.rbegin()+shl - A;
        rig.insert(*lef.rbegin()+shl-shr);
        lef.extract(*lef.rbegin());
        lef.insert(A-shl);
        lef.insert(A-shl);
    }
    else {
        lef.insert(A-shl);
        rig.insert(A-shr);
    }
}
signed main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    //dp[x]->min(-inf,x-1), dp[x]+=abs(x-a[i])
    int n,h; cin>>n>>h;
    int a[n];
    lef.insert(-inf); rig.insert(inf);
    for(int i=0;i<n;i++){
        cin>>a[i];
        if(i==0){
            mn=0;
            lef.insert(a[i]); rig.insert(a[i]);
        }
        else{
            shr+=h; shl-=h;
            insert(a[i]);
        }
    }
    cout<<mn;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...