234872026-01-23 18:39:17matemakaiFasor (40)cpp17Accepted 40/4090ms3272 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]) {
		if (get_max(i, min(n - 1, i + k)) <= v[i]) {
			ans = i + 1;
			break;
		}
	}

	cout << ans << endl;
}
SubtaskSumTestVerdictTimeMemory
base40/40
1Accepted0/01ms316 KiB
2Accepted0/04ms748 KiB
3Accepted2/21ms316 KiB
4Accepted2/21ms316 KiB
5Accepted2/21ms316 KiB
6Accepted2/21ms316 KiB
7Accepted2/21ms316 KiB
8Accepted2/22ms316 KiB
9Accepted2/24ms564 KiB
10Accepted2/24ms576 KiB
11Accepted2/24ms564 KiB
12Accepted2/23ms368 KiB
13Accepted2/248ms1588 KiB
14Accepted2/248ms1832 KiB
15Accepted2/272ms3248 KiB
16Accepted2/279ms3248 KiB
17Accepted2/286ms3256 KiB
18Accepted2/289ms3256 KiB
19Accepted2/290ms3124 KiB
20Accepted2/230ms1832 KiB
21Accepted2/275ms3272 KiB
22Accepted2/287ms3248 KiB