1 #include<stdio.h> 2 int a[1000005], d[1000005], l, r, n, k; 3 int main() 4 { 5 while(scanf("%d%d", &n, &k) != EOF) 6 { 7 for(int i = 1; i <= n; i++) scanf("%d", a + i); 8 l = r = 0; 9 for(int i = 1; i <= n; i++) //求最小值 10 { 11 while(l != r && a[i] <= a[d[r - 1]]) r--; 12 d[r++] = i; 13 while(i - d[l] >= k) l++; 14 if(i >= k || i == n) printf("%d%c", a[d[l]], i == n ? ' ' : ' '); 15 } 16 l = r = 0; 17 for(int i = 1; i <= n; i++) //求最大值 18 { 19 while(l != r && a[i] >= a[d[r - 1]]) r--; 20 d[r++] = i; 21 while(i - d[l] >= k) l++; 22 if(i >= k || i == n) printf("%d%c", a[d[l]], i == n ? ' ' : ' '); 23 } 24 } 25 return 0; 26 }
提交选择c++