题目链接:https://codeforces.com/contest/69/problem/E
示例程序:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5, maxm = 1e7 + 5;
int n, K, a[maxn], tr[maxm], tc[maxm], inf = 1e9, rt = 1, idx = 1;
int ls[maxm], rs[maxm];
void push_up(int u) {
tr[u] = tr[ls[u]] + tr[rs[u]];
}
void update(int p, int c, int l, int r, int &u) {
if (!u)
u = ++idx;
if (l == r) {
tc[u] += c;
if (tc[u] == 1)
tr[u] = 1;
else
tr[u] = 0;
return;
}
int mid = l + (r - l) / 2;
(p <= mid) ? update(p, c, l, mid, ls[u]) : update(p, c, mid+1, r, rs[u]);
push_up(u);
}
int query(int l, int r, int u) {
if (!u || !tr[u])
return 0;
if (l == r)
return l;
int mid = l + (r - l) / 2;
int res = query(mid+1, r, rs[u]);
if (res) return res;
return query(l, mid, ls[u]);
}
int main() {
scanf("%d%d", &n, &K);
for (int i = 1; i <= n; i++)
scanf("%d", a+i);
for (int i = 1; i <= n; i++) {
update(a[i], 1, -inf, inf, rt);
if (i > K)
update(a[i-K], -1, -inf, inf, rt);
int ans = query(-inf, inf, rt);
if (i >= K) {
if (!ans)
puts("Nothing");
else
printf("%d\n", ans);
}
}
return 0;
}