单调队列。

  1 /* 2823 */
  2 #include <iostream>
  3 #include <sstream>
  4 #include <string>
  5 #include <map>
  6 #include <queue>
  7 #include <set>
  8 #include <stack>
  9 #include <vector>
 10 #include <deque>
 11 #include <algorithm>
 12 #include <cstdio>
 13 #include <cmath>
 14 #include <ctime>
 15 #include <cstring>
 16 #include <climits>
 17 #include <cctype>
 18 #include <cassert>
 19 #include <functional>
 20 #include <iterator>
 21 #include <iomanip>
 22 using namespace std;
 23 //#pragma comment(linker,"/STACK:102400000,1024000")
 24
 25 #define sti                set<int>
 26 #define stpii            set<pair<int, int> >
 27 #define mpii            map<int,int>
 28 #define vi                vector<int>
 29 #define pii                pair<int,int>
 30 #define vpii            vector<pair<int,int> >
 31 #define rep(i, a, n)     for (int i=a;i<n;++i)
 32 #define per(i, a, n)     for (int i=n-1;i>=a;--i)
 33 #define clr                clear
 34 #define pb                 push_back
 35 #define mp                 make_pair
 36 #define fir                first
 37 #define sec                second
 38 #define all(x)             (x).begin(),(x).end()
 39 #define SZ(x)             ((int)(x).size())
 40 #define lson            l, mid, rt<<1
 41 #define rson            mid+1, r, rt<<1|1
 42
 43 const int maxn = 1e6+5;
 44 int n, k;
 45 int a[maxn];
 46 int Q[maxn], P[maxn];
 47 int mn[maxn], mx[maxn];
 48
 49 void getMin() {
 50     int l = 1, r = 0;
 51     int i;
 52
 53     for (i=0; i<k-1; ++i) {
 54         while (l<=r && Q[r]>=a[i])
 55             --r;
 56         Q[++r] = a[i];
 57         P[r] = i;
 58     }
 59
 60     for (; i<n; ++i) {
 61         while (l<=r && Q[r]>=a[i])
 62             --r;
 63         Q[++r] = a[i];
 64         P[r] = i;
 65         while (P[l] < i-k+1)
 66             ++l;
 67         mn[i-k+1] = Q[l];
 68     }
 69 }
 70
 71 void getMax() {
 72     int l = 1, r = 0;
 73     int i;
 74
 75     for (i=0; i<k-1; ++i) {
 76         while (l<=r && Q[r]<=a[i])
 77             --r;
 78         Q[++r] = a[i];
 79         P[r] = i;
 80     }
 81
 82     for (; i<n; ++i) {
 83         while (l<=r && Q[r]<=a[i])
 84             --r;
 85         Q[++r] = a[i];
 86         P[r] = i;
 87         while (P[l] < i-k+1)
 88             ++l;
 89         mx[i-k+1] = Q[l];
 90     }
 91 }
 92
 93 void solve() {
 94     getMin();
 95     getMax();
 96     rep(i, 0, n-k+1) {
 97         if (i == n-k)
 98             printf("%d\n", mn[i]);
 99         else
100             printf("%d ", mn[i]);
101     }
102     rep(i, 0, n-k+1) {
103         if (i == n-k)
104             printf("%d\n", mx[i]);
105         else
106             printf("%d ", mx[i]);
107     }
108 }
109
110 int main() {
111     ios::sync_with_stdio(false);
112     #ifndef ONLINE_JUDGE
113         freopen("data.in", "r", stdin);
114         freopen("data.out", "w", stdout);
115     #endif
116
117     scanf("%d %d", &n, &k);
118     rep(i, 0, n)
119         scanf("%d", &a[i]);
120     solve();
121
122     #ifndef ONLINE_JUDGE
123         printf("time = %d.\n", (int)clock());
124     #endif
125
126     return 0;
127 }

转载于:https://www.cnblogs.com/bombe1013/p/5078783.html

【POJ】2823 Sliding Window相关推荐

  1. 【POJ】1067 取石子游戏(博弈论)

    Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...

  2. 【POJ】2676-Sudoku 【51Nod】1211-数独(DFS)

    [POJ]2676-Sudoku Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 25200 Accepted: 11782 Sp ...

  3. 【POJ】 1014 Dividing(多重背包,优化)

    [POJ] 1014 Dividing(多重背包,优化) [题目链接]http://poj.org/problem?id=1014 题目 Description Marsha and Bill own ...

  4. 【POJ】1456 supermarket

    [POJ]1456 supermarket 给定 n 件物品,第 i件物品有如下信息: 卖出去可以得到pi的收益. 过期时间为di ,过了过期时间就不能再卖出去. 卖掉一件物品要用 1 的时间,求最大 ...

  5. POJ 2823 Sliding Window

    Sliding Window 链接:http://poj.org/problem?id=2823 Time Limit: 12000MS   Memory Limit: 65536K       Ca ...

  6. 【Siddhi】Siddhi的window操作

    1.概述 fxjwind Siddhi CEP Window机制 https://docs.wso2.com/display/CEP400/SiddhiQL+Guide+3.0#SiddhiQLGui ...

  7. POJ 2823 Sliding Window(单调队列)

    http://poj.org/problem?id=2823 题意: 给出数组和滑动窗口的大小,每次输出滑动窗口中的最大值和最小值. 思路: 这题可以算是单调队列的模板题了,分别维护单调递增和单调递减 ...

  8. POJ 2823 Sliding Window (单调队列)

    单调队列 加了读入挂比不加更慢.... 而且这份代码要交c++ 有大神G++跑了700ms..... orzorzorz #include<iostream> #include<cs ...

  9. 【POJ】3268 Silver Cow Party (将有向图的边反转)

    问题链接:http://poj.org/problem?id=3268 [问题描述] One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...

最新文章

  1. 2019 GDUT Rating Contest I : Problem H. Mixing Milk
  2. SQL SERVER2008 镜像
  3. Watershed函数
  4. 家用电器如何计算功率和消耗的度数
  5. 【写给朱大虫的教程】【Ruby on Rails】【006】遵循Rails理念的快速实现
  6. $.ajax 同步一不,ajax 同步不生效
  7. c mysql 添加数据类型_MYSQL的常用命令和增删改查语句和数据类型
  8. Leetcode 210.课程表II
  9. ubuntu上常用的软件安装
  10. 【自学笔记】基于R语言的copula函数重现期等值线绘制
  11. 第2章第29节:英文排版技巧:无衬线字体和手写字体的搭配 [PowerPoint精美幻灯片实战教程]
  12. 3993: [SDOI2015]星际战争
  13. 2021年全球起酥油收入大约4171.6百万美元,预计2028年达到5052.7百万美元,2022至2028期间,年复合增长率CAGR为 2.8%
  14. 微信创建公众号菜单时出现48001,api unauthorized rid怎么解决?
  15. 深入理解机器学习——集成学习(Ensemble Learning):基础知识
  16. object标签属性详解
  17. Vim 批量在行首/行尾插入相同字符
  18. 企业为什么需要知识管理
  19. 微信人工客服电话号码是多少
  20. 期货开户手机APP有哪些?

热门文章

  1. 十分钟弄懂最快的APP自动化工具uiautomator2
  2. 性能测试很难吗?一文带你学会性能测试核心流程和概念
  3. 360怎么看电脑配置_怎么样查看电脑配置?5种方法查看电脑硬件配置好坏图文详解...
  4. 深圳爱思拓大数据 网站_建议收藏!13个大数据学习网站很少人知道!附大数据自学资料分享...
  5. 如何从文件名字符串中获取文件扩展名_Linux操作系统:文件系统的功能和命名...
  6. mosaic数据增强_YoloV4当中的Mosaic数据增强方法(附代码详细讲解)
  7. java email怎么设置端口号_java mail 设置参数
  8. 51单片机c语言显示hello,51单片机控制动态数码管显示12345和HELLO字样的设
  9. DE25 Homogeneous Linear Systems with Constant Coefficients
  10. php 赋予变量现在时间,PHP关于变量和日期处理的面试题