#include <bits/stdc++.h>
#define int long long
using namespace std;
const int kN = 1e6 + 5, kI = 1e18;
int n, m, c, a[kN];
struct Node {
int l, r, mx, mn;
} tree[kN << 2];
void PushUp(int u) {
tree[u].mx = max(tree[u << 1].mx, tree[u << 1 | 1].mx);
tree[u].mn = min(tree[u << 1].mn, tree[u << 1 | 1].mn);
}
void Build(int u, int l, int r) {
tree[u] = {l, r, -kI, kI};
if (l == r) {
tree[u].mn = tree[u].mx = a[l];
return;
}
int mid = l + r >> 1;
Build(u << 1, l, mid), Build(u << 1 | 1, mid + 1, r);
PushUp(u);
}
int Query(int u, int l, int r, bool f) {
if (l <= tree[u].l && tree[u].r <= r) {
if (!f) {
return tree[u].mn;
} else {
return tree[u].mx;
}
}
int mid = tree[u].l + tree[u].r >> 1, ans = (f ? -kI : kI);
if (!f) {
if (l <= mid) {
ans = min(ans, Query(u << 1, l, mid, f));
}
if (mid < r) {
ans = min(ans, Query(u << 1 | 1, mid + 1, r, f));
}
} else {
if (l <= mid) {
ans = max(ans, Query(u << 1, l, mid, f));
}
if (mid < r) {
ans = max(ans, Query(u << 1 | 1, mid + 1, r, f));
}
}
return ans;
}
signed main() {
cin.tie(0)->sync_with_stdio(false);
cin >> n >> m >> c;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
Build(1, 1, n);
for (int i = 1, r; i <= n; i++) {
r = i + m - 1;
if (Query(1, i, r, 1) - Query(1, i, r, 0) <= c) {
cout << i << '\n';
}
}
return 0;
}
样例没有输出,输出 NONE 还没判。
[1,2] 查询的最大值说是 2,最小值是 0。