http://poj.org/problem?id=2823
Maximum value, minimum value, of a subsequence of length K
#include <iostream>#include <cstring>#include <cstdio>#include <vector>#include <algorithm>#define PK Push_backConst intINF =0x3f3f3f3f;Const intMAXN =1000010;using namespace STD;intN,k;intA[MAXN],QUE[MAXN]; vector<int>mx vector<int>MivoidSolve vector<int>& DP) {intFront,rear; Front=rear=1; Dp.clear (); for(intI=1; i<=n;++i) { while(front<rear&&a[que[rear-1]]>a[i]) rear--; Que[rear++]=i; while(front<rear&&i-que[front]+1>k) front++;if(i>=k) dp.pk (A[que[front]); }}intMain () {#ifndef Online_judgeFreopen ("In.txt","R", stdin); Freopen ("OUT.txt","W", stdout);#endif //Online_judge while(scanf("%d%d", &n,&k) = =2){ for(intI=1; i<=n;++i)scanf("%d", &a[i]); Solve (MI); for(intI=1; i<=n;++i) A[i]=-a[i]; Solve (MX); for(intI=0; i<=n-k;++i) {if(i<n-k)printf("%d", Mi[i]);Else printf("%d\n", Mi[i]); } for(intI=0; i<=n-k;++i) {if(i<n-k)printf("%d",-mx[i]);Else printf("%d\n",-mx[i]); } }return 0;}
POJ2823. Sliding window--Monotone Queue