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(""); }