234862026-01-23 18:30:36matemakaiFasor (40)cpp17Accepted 40/4090ms3316 KiB
#include <bits/stdc++.h>
using namespace std;

int tree_size = 1;
vector<int> tree;

void update(int k, int x) {
	k += tree_size;
	tree[k] = x;
	for (k /= 2; k >= 1; k /= 2) {	
		tree[k] = max(tree[2 * k], tree[2 * k + 1]);
	}
}

int get_max(int a, int b) {
	a += tree_size;
	b += tree_size;
	int ans = -1;
	while (a <= b) {
		if (a % 2 == 1) {
			ans = max(ans, tree[a++]);
		}
		if (b % 2 == 0) {
			ans = max(ans, tree[b--]);
		}
		a /= 2;
		b /= 2;
	}

	return ans;
}

int main() {
	int n, k;
	cin >> n >> k;
	while (tree_size < n) {
		tree_size *= 2;
	}
	tree_size;
	tree.resize(tree_size * 2, -1);
	vector<int> v(n);
	for (int i = 0; i < n; ++i) {
		cin >> v[i];
		update(i, v[i]);
	}

	int ans = -1;

	for (int i = 0; i < n; ++i) {
		if (get_max(max(0, i - k), min(n - 1, i + k)) <= v[i]) {
			ans = i + 1;
			break;
		}
	}

	cout << ans << endl;
}
SubtaskSumTestVerdictTimeMemory
base40/40
1Accepted0/01ms316 KiB
2Accepted0/04ms756 KiB
3Accepted2/21ms316 KiB
4Accepted2/21ms316 KiB
5Accepted2/21ms316 KiB
6Accepted2/21ms316 KiB
7Accepted2/21ms316 KiB
8Accepted2/22ms500 KiB
9Accepted2/24ms564 KiB
10Accepted2/24ms580 KiB
11Accepted2/24ms564 KiB
12Accepted2/23ms756 KiB
13Accepted2/250ms1828 KiB
14Accepted2/243ms1828 KiB
15Accepted2/271ms3124 KiB
16Accepted2/281ms3248 KiB
17Accepted2/285ms3248 KiB
18Accepted2/287ms3316 KiB
19Accepted2/290ms3252 KiB
20Accepted2/230ms1588 KiB
21Accepted2/275ms3244 KiB
22Accepted2/286ms3124 KiB