数据结构 - 单调队列
数据结构 - 单调队列
题目链接:http://poj.org/problem?id=2823
代码:
//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 1e6 + 10;
int n, k;
int num[N], st[N];
int minn[N], maxx[N];
int main() {
scanf("%d%d", &n, &k);
for (int i = 1; i <= n; i ++ ) {
scanf("%d", &num[i]);
}
int l = 1, r = 1;
for (int i = 1; i <= n; i ++ ) {
while (l <= r && i - st[l] >= k) {
l ++ ;
}
while (l <= r && num[i] < num[st[r]]) {
r -- ;
}
st[ ++ r] = i;
if (i >= k) {
minn[i] = num[st[l]];
}
}
l = 1, r = 1;
for (int i = 1; i <= n; i ++ ) {
while (l <= r && i - st[l] >= k) {
l ++ ;
}
while (l <= r && num[i] > num[st[r]]) {
r -- ;
}
st[ ++ r] = i;
if (i >= k) {
maxx[i] = num[st[l]];
}
}
for (int i = k; i <= n; i ++ ) {
printf("%d ", minn[i]);
}
puts("");
for (int i = k; i <= n; i ++ ) {
printf("%d ", maxx[i]);
}
return 0;
}