제출 #1350137

#제출 시각아이디문제언어결과실행 시간메모리
1350137MisterReaperSparklers (JOI17_sparklers)C++20
0 / 100
0 ms344 KiB
#include <bits/stdc++.h>

using i64 = long long;

#ifdef DEBUG 
    #include "/home/ahmetalp/Desktop/Workplace/debug.h"
#else
    #define debug(...) void(23)
#endif

constexpr int max_N = int(1E5) + 5;

int N;
int K;
int T;
int X[max_N];
i64 Y[max_N];

bool check(int s) {
    for (int i = 0; i < N; ++i) {
        Y[i] = X[i] - 2LL * i * T * s;
    }
    i64 mx = Y[K];
    i64 mn = Y[K];
    int l = K;
    int r = K;
    while (true) {
        if (l && Y[l - 1] >= mn) {
            l -= 1;
            mx = std::max(mx, Y[l]);
        } else if (r + 1 < N && Y[r + 1] <= mx) {
            r += 1;
            mn = std::min(mn, Y[r]);
        } else {
            break;
        }
    }
    return l == 0 && r == N - 1;
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    std::cin >> N >> K >> T;
    --K;

    for (int i = 0; i < N; ++i) {
        std::cin >> X[i];
    }

    int lo = 0, hi = int(1E9);
    while (lo < hi) {
        int mid = (lo + hi) >> 1;
        if (check(mid)) {
            hi = mid;
        } else {
            lo = mid + 1;
        }
    }

    std::cout << lo << '\n';

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...