码迷,mamicode.com
首页 > 其他好文 > 详细

滑动窗口

时间:2017-05-01 20:57:56      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:href   技术分享   gif   event   lib   getchar   get   lap   char   

传送门

 

可以搞2个单调队列。

然后,然后就没有然后了。

技术分享
 1 # include <iostream>
 2 # include <cstdio>
 3 # include <cstring>
 4 # include <string>
 5 # include <cmath>
 6 # include <vector>
 7 # include <map>
 8 # include <queue>
 9 # include <cstdlib>
10 # define MAXN 1000001
11 using namespace std;
12 
13 inline int get_num() {
14     int k = 0, f = 1;
15     char c = getchar();
16     for(; !isdigit(c); c = getchar()) if(c == -) f = -1;
17     for(; isdigit(c); c = getchar()) k = k * 10 + c - 0;
18     return k * f;
19 }
20 
21 int n, k, h1 = 1, t1, h2 = 1, t2;
22 int a[MAXN], q1[MAXN], q2[MAXN], ans1[MAXN], ans2[MAXN];
23 
24 int main()
25 {
26     int i;
27     n = get_num();
28     k = get_num();
29     for(i = 1; i <= n; i++) a[i] = get_num();
30     for(i = 1; i <= n; i++)
31     {
32         while(h1 <= t1 && q1[h1] < i - k + 1) h1++;
33         while(h2 <= t2 && q2[h2] < i - k + 1) h2++;
34         while(h1 <= t1 && a[q1[t1]] > a[i]) t1--;
35         q1[++t1] = i;
36         while(h2 <= t2 && a[q2[t2]] < a[i]) t2--;
37         q2[++t2] = i;
38         ans1[i] = a[q1[h1]];
39         ans2[i] = a[q2[h2]];
40     }
41     for(i = k; i <= n; i++) printf("%d ", ans1[i]);
42     puts("");
43     for(i = k; i <= n; i++) printf("%d ", ans2[i]);
44     puts("");
45     return 0;
46 }
View Code

完全临摹黄学长代码2333

滑动窗口

标签:href   技术分享   gif   event   lib   getchar   get   lap   char   

原文地址:http://www.cnblogs.com/zhenghaotian/p/6792655.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!