제출 #586337

#제출 시각아이디문제언어결과실행 시간메모리
586337JomnoiSafety (NOI18_safety)C++17
100 / 100
47 ms6280 KiB
#include <bits/stdc++.h>
using namespace std;

const int MAX_N = 2e5 + 5;

int S[MAX_N];
priority_queue <long long> L;
priority_queue <long long, vector <long long>, greater <long long>> R;

int main() {
    cin.tie(nullptr)->sync_with_stdio(false);

    int N, H;
    cin >> N >> H;
    
    for(int i = 1; i <= N; i++) {
        cin >> S[i];
    }

    L.push(S[1]);
    R.push(S[1]);
    long long yMin = 0, shift = 0; 
    for(int i = 2; i <= N; i++) {
        shift += H;

        if(S[i] < L.top() - shift) {
            yMin += (L.top() - shift) - S[i];
            R.push(L.top() - 2 * shift);
            L.pop();
            L.push(S[i] + shift);
            L.push(S[i] + shift);
        }
        else if(S[i] > R.top() + shift) {
            yMin += S[i] - (R.top() + shift);
            L.push(R.top() + 2 * shift);
            R.pop();
            R.push(S[i] - shift);
            R.push(S[i] - shift);
        }
        else {
            L.push(S[i] + shift);
            R.push(S[i] - shift);
        }
    }
    cout << yMin;
    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...