#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <cstring>
#include <set>
#include <cmath>
#include <map>
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
const int MN = 65005;
const int MAXN = 1000005;
const int INF = 0x3f3f3f3f;
#define IOS ios::sync_with_stdio(false)
int n, k, a[MAXN], q[MAXN], head = 1, tail;
int main() {
scanf("%d %d", &n, &k);
for (int i = 1; i <= n; i++) {
scanf("%d", a + i);
while (head <= tail && q[head] <= i - k) {
head++;//若区间大了则减小区间
}
while (head <= tail && a[q[tail]] >= a[i]) {
tail--;//若新元素比队尾小则一直向前删元素直到条件结束为止
}
q[++tail] = i;//加上新元素
if (i >= k) {
printf("%d ", a[q[head]]);
}
}
printf("\n");
head = 1, tail = 0;
for (int i = 1; i <= n; i++) {
while (head <= tail && q[head] <= i - k) {
head++;
}
while (head <= tail && a[q[tail]] <= a[i]) {
tail--;//若比队尾元素大则。。。
}
q[++tail] = i;
if (i >= k) {
printf("%d ", a[q[head]]);
}
}
return 0;
}
03-26
524
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
07-28
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交