#include <cstdio>
using namespace std;
struct que_ele { int pos, value; que_ele():pos(0),value(0){} };
que_ele min_que[16266035];
int front = 0, tail = 0;
int insert(const int num, const int period, const int pos) {
while (tail >= front && min_que[front].pos <= pos - period)
front++;
const int res = min_que[front].value; //前period项的队列头
while (tail >= front && min_que[tail - 1].value >= num)
tail--; //比num大的踢出队列
min_que[tail].value = num;
min_que[tail++].pos = pos;
return res;
}
inline int& query_min(void) {
return min_que[front].value;
}
int main() {
int n, m, temp = 0;
scanf("%d%d", &n, &m);
for(int i = 0; i < n; i++)
{
scanf("%d", &temp);
printf("%d\n", insert(temp, m, i));
}
return 0;
}
0 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 12 12 12 12
12 12 22 22 22 22 22 22 17 17
17 17 17 17 17 17 17 17 17 17
17 17 17 33 33 33 33 33 33 33
37 37 19 19 19 19 19 19 19 19
19 19 19 19 19 19 19 28 28 19
19 19 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 1 1 1
1 1 1 1 1 1 1 1 1 1
0 5 5 5 5 5 5 5 5 5
5 5 5 5 5 12 12 12 12 12
12 22 22 22 22 22 22 22 17 17
17 17 17 17 17 17 17 17 17 17
17 17 33 33 33 33 33 33 33 37
37 37 37 44 44 44 44 44 28 28
28 28 28 28 28 28 28 28 28 28
188 56 56 65 65 29 29 29 29 29
29 29 29 27 27 27 27 27 186 19
19 19 19 19 19 19 18 2 2 2
代码 70 分,目测有些问题。