NWU_ACM

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
 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 ? '\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 ? '\n' : ' ');
23         }
24     }
25     return 0;
26 }
View Code

提交选择c++

posted on 2017-03-11 16:33  NWU_ACM  阅读(124)  评论(0编辑  收藏  举报