164872025-05-03 01:06:18algoproFasor (40)cpp17Accepted 40/4083ms2740 KiB
// UUID: 11a59961-5e5d-40f6-8c54-18bad4d8eb4e
#include <bits/stdc++.h>
using namespace std;

#include <iostream>
#include <vector>
#include <deque>
using namespace std;

int main() {
    int N, K;
    cin >> N >> K;

    vector<int> H(N);
    for (int i = 0; i < N; ++i) {
        cin >> H[i];
    }

    vector<int> maxLeft(N, 0), maxRight(N, 0);

    deque<int> dq;
    for (int i = N - 1; i >= 0; --i) {
        while (!dq.empty() && dq.front() > i + K) dq.pop_front();
        while (!dq.empty() && H[dq.back()] <= H[i]) dq.pop_back();
        dq.push_back(i);
        if (i + 1 <= N - 1) maxRight[i] = H[dq.front()];
    }
    
    dq.clear();
    for (int i = 0; i < N; ++i) {
        while (!dq.empty() && dq.front() < i - K) dq.pop_front();
        while (!dq.empty() && H[dq.back()] <= H[i]) dq.pop_back();
        dq.push_back(i);
        if (i - 1 >= 0) maxLeft[i] = H[dq.front()];
    }

    for (int i = 0; i < N; ++i) {
        bool ok = true;
        if (i - 1 >= 0 && maxLeft[i] > H[i]) ok = false;
        if (i + 1 <= N - 1 && maxRight[i] > H[i]) ok = false;
        if (ok) {
            cout << (i + 1) << endl;  
            return 0;
        }
    }

    cout << -1 << endl;
    return 0;
}
SubtaskSumTestVerdictTimeMemory
base40/40
1Accepted0/01ms316 KiB
2Accepted0/04ms316 KiB
3Accepted2/21ms316 KiB
4Accepted2/21ms320 KiB
5Accepted2/21ms316 KiB
6Accepted2/21ms508 KiB
7Accepted2/21ms316 KiB
8Accepted2/22ms500 KiB
9Accepted2/24ms316 KiB
10Accepted2/24ms316 KiB
11Accepted2/24ms432 KiB
12Accepted2/23ms580 KiB
13Accepted2/239ms1564 KiB
14Accepted2/235ms1568 KiB
15Accepted2/265ms2740 KiB
16Accepted2/271ms2728 KiB
17Accepted2/278ms2612 KiB
18Accepted2/278ms2612 KiB
19Accepted2/276ms2732 KiB
20Accepted2/224ms1572 KiB
21Accepted2/263ms2612 KiB
22Accepted2/283ms2612 KiB