题目连接:http://poj.org/problem?id=2823
代码含全角空格
#include <iostream>
#include <cstdio>
using namespace std;
const int N=1e6+5;
struct node{
int num,id;
}Q[N];
int n,k,a[N];
int main()
{
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++) scanf("%d",&a[i]);
int l=1,r=0;//这样初始化,则为l<=r
for(int i=0;i<k-1;i++){
while(l<=r&&Q[r].num>=a[i])
r--;
Q[++r].id=i;
Q[r].num=a[i];
}
for(int i=k-1;i<n;i++){
while(l<=r&&Q[l].id<i-k+1)
l++;
while(l<=r&&Q[r].num>=a[i]) r--;
Q[++r].id=i;
Q[r].num=a[i];
printf("%d ",Q[l].num);
}
printf("\n");
l=1,r=0;
for(int i=0;i<k-1;i++){
while(l<=r&&Q[r].num<=a[i])
r--;
Q[++r].id=i;
Q[r].num=a[i];
}
for(int i=k-1;i<n;i++){
while(l<=r&&Q[l].id<i-k+1)l++;
while(l<=r&&Q[r].num<=a[i])r--;
Q[++r].id=i;
Q[r].num=a[i];
printf("%d ",Q[l].num);
}
printf("\n");
return 0;
}