1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #include <iostream> using namespace std;
const int N = 1e6+10;
int n,k;
int q[N], a[N]; int tt, hh;
int main() { scanf("%d%d", &n, &k); for(int i=0;i<n;i++) { scanf("%d", &a[i]); } hh=0, tt=-1; for(int i=0;i<n;i++) { if(hh <= tt && q[hh] < i-k+1) hh++; while(hh <= tt && a[q[tt]] >= a[i]) tt--; q[++tt] = i; if(i>=k-1) printf("%d ", a[q[hh]]); } puts(""); hh=0, tt=-1; for(int i=0;i<n;i++) { if(hh <= tt && q[hh] < i-k+1) hh++; while(hh <= tt && a[q[tt]] <= a[i]) tt--; q[++tt] = i; if(i>=k-1) printf("%d ", a[q[hh]]); } return 0; }
|