http://poj.org/problem?id=2823
题意:给出n个数,窗口大小为k,窗口从1滑到n-k,问所以窗口内的最大最小值;
#include <iostream>
using namespace std;
int a[1001000] , q[1001000] ;
int h , r ;
int main(){
int n , m ;
scanf("%d%d" , &n , &m);
for(int i = 0 ; i < n ; i ++){
scanf("%d" , &a[i]);
}
int h = 1 , r = 0 ;
for(int i = 0 ; i < n ; i ++){
while(r >= h && a[q[r]] >= a[i]) r--;
if(r >= h && i - q[h] >= m) h++;
q[++r] = i;
if(i >= m - 1) cout << a[q[h]] << " " ;
}
puts("");
h = 1 ; r = 0;
for(int i = 0 ; i < n ; i ++){
while(r >= h && a[q[r]] <= a[i]) r--;
if(r >= h && i - q[h] >= m) h++;
q[++r] = i ;
if(i >= m - 1) cout << a[q[h]] << " " ;
}
puts("");
}