Submission #1350144

#TimeUsernameProblemLanguageResultExecution timeMemory
1350144MisterReaperSparklers (JOI17_sparklers)C++20
100 / 100
13 ms2388 KiB
#include <bits/stdc++.h>

using i64 = long long;
using i128 = __int128_t;

#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];
i128 Y[max_N];

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

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...