poj_2823 单调队列
题目大意
给定一行数,共N个。有一个长度为K的窗口从左向右滑动,窗口中始终有K个数字,窗口每次滑动一个数字。求各个时刻窗口中的最大值和最小值。
题目分析
直接搜索,复杂度为O(n^2)。考虑使用单调队列,单调队列中的元素(或者元素的相关信息)单调递增或者递减。在本题中用一个单调递增的队列A保存当前窗口中值逐渐递增的索引,队列的头部元素为当前窗口中的最小值的索引;用一个单调递减的队列B保存当前窗口中值逐渐递减的索引,队列的头部元素为当前窗口中最大值的索引。
窗口每移动到一个新的元素ele时,若新元素大于A中的队尾元素,则入队列,否则,不断弹出队尾的元素,直到队尾元素小于ele,然后入队;若新元素小于B的队尾元素,则入队列,否则,不断弹出队尾元素,直到队尾元素大于ele,然后入队。
若窗口移动到的最新元素的index - 队列头元素(队列中存放的是索引) > 窗口长度k,则队列头部后移,以保证队列中的索引位于窗口之内。
每个元素最多入栈2次,出栈2次,平摊复杂度为O(n).
单调队列/栈中存放的一般为序列元素的索引(可能还有其他更多信息),且每次新元素和队尾/栈顶元素比较,若满足单调性质,则入队/入栈;否则,不断弹出队尾/栈顶元素,直到满足单调性质,再入队/入栈。
有时可能还需要考虑栈和队列的size(如本题中的窗口)
实现(c++)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define MAX_SIZE 1000005
int gMaxInWindow[MAX_SIZE];
int gMinInWindow[MAX_SIZE];
int gIncQ[MAX_SIZE];
int gDecQ[MAX_SIZE];
int gArray[MAX_SIZE];
int main(){
int n, k;
scanf("%d %d", &n, &k);
int inc_front = 0, inc_tail = -1, dec_front = 0, dec_tail = -1;
int ele;
for (int i = 0; i < n; i++){
scanf("%d", &ele);
gArray[i] = ele; while (inc_tail >= inc_front && gArray[gIncQ[inc_tail]] >= ele){
inc_tail--;
}
inc_tail++;
gIncQ[inc_tail] = i; while (dec_tail >= dec_front && gArray[gDecQ[dec_tail]] <= ele){
dec_tail--;
}
dec_tail++;
gDecQ[dec_tail] = i; if (i - gIncQ[inc_front] >= k){
inc_front++;
}
if (i - gDecQ[dec_front] >= k){
dec_front++;
}
if (i >= k - 1){
gMinInWindow[i - k + 1] = gArray[gIncQ[inc_front]];
gMaxInWindow[i - k + 1] = gArray[gDecQ[dec_front]];
}
}
for (int i = 0; i <= n - k; i++){
printf("%d ", gMinInWindow[i]);
}
printf("\n");
for (int i = 0; i <= n - k; i++){
printf("%d ", gMaxInWindow[i]);
} return 0;
}
poj_2823 单调队列的更多相关文章
- BestCoder Round #89 B题---Fxx and game(单调队列)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5945 问题描述 输入描述 输出描述 输入样例 输出样例 题意:中文题,不再赘述: 思路: B ...
- 单调队列 && 斜率优化dp 专题
首先得讲一下单调队列,顾名思义,单调队列就是队列中的每个元素具有单调性,如果是单调递增队列,那么每个元素都是单调递增的,反正,亦然. 那么如何对单调队列进行操作呢? 是这样的:对于单调队列而言,队首和 ...
- FZU 1914 单调队列
题目链接:http://acm.fzu.edu.cn/problem.php?pid=1914 题意: 给出一个数列,如果它的前i(1<=i<=n)项和都是正的,那么这个数列是正的,问这个 ...
- BZOJ 1047 二维单调队列
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1047 题意:见中文题面 思路:该题是求二维的子矩阵的最大值与最小值的差值尽量小.所以可以考 ...
- 【BZOJ3314】 [Usaco2013 Nov]Crowded Cows 单调队列
第一次写单调队列太垃圾... 左右各扫一遍即可. #include <iostream> #include <cstdio> #include <cstring> ...
- BZOJ1047: [HAOI2007]理想的正方形 [单调队列]
1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2857 Solved: 1560[Submit][St ...
- hdu 3401 单调队列优化DP
Trade Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- 【转】单调队列优化DP
转自 : http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950.html 单调队列是一种严格单调的队列,可以单调递增,也可以单调递减.队 ...
- hdu3530 单调队列
Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
随机推荐
- unity, switch platform
例如一开始是iPhone, iPod Touch and iPad,如图: 想切换成PC, Mac & Linux Standalone,如图: 方法是File->Build Setti ...
- 详解php的安装模式---CGI,FASTCGI,php-fpm,mod_php,mod_cgi,mod_fcgid
1. CGI CGI是通用网关接口,HTTP服务器使用这样的接口程序来和“其他程序”(比如PHP的解释器程序)通讯,这个“其他程序”可以使用任何计算机语言来编写,它通过CGI这个接口从HTTP服务器取 ...
- Facebook API 入门
Facebook 商业价值简介 Facebook 是一个社交网络服务网站,于 2004 年 2 月 4 日上线,到 2010 年 2 月 2 日, Facebook 正赶超雅虎将成为全球第三大网站,与 ...
- Go语言核心之美 4.3-多返回值
在Go语言中.函数能够有多个返回值,这个特性我们已经在之前的样例见过非常多,非常多标准库函数都会返回两个值,一个是期望得到的函数执行结果,另外一个是函数出错时的错误值. 以下的程序是findlinks ...
- ubuntu中rc.local无效
在ubuntu中写了一点iptables规则,但是,竟然iptables竟然无效,经过多方查找问题...眼泪... 终于发现是rc.local竟然没有运行,我晕.仔细检查iptables脚本n遍,没有 ...
- Atitit。团队建设--管理最佳实践--如何留住核心人才,防止人才流失 ??
Atitit.团队建设--管理最佳实践--如何留住核心人才,防止人才流失 ?? 1. 1.人才流失后果 1 1. 1.员工的离职带走商业技术秘密和客户等资源 1 2. 2.影响在职员工的情绪,极大挫伤 ...
- 【Tips】【UE】总结自己常用的UltraEdit使用技巧
如果您问我每天都要打开的软件是什么,那毫无疑问是UltraEdit!作为一位DBA,每天都要写各种脚本,尤其是在对具有超多行行的大文件进行精心编辑时,没有一个好的文本编辑器是不成的.掐指一算,哇塞,自 ...
- navicat 手动设置索引unique,报错duplicate entry "" for key ""
错误场景:仅限于手动设置unique时.在navicat中根据流程:右键表名 -> 设计表 -> 索引 -> 设置某列为unique -> 保存错误图示: 错误原因:这句错误提 ...
- Spring学习10-SpringMV核心组件2及SpringMVC项目示例
一.SpringMVC核心接口 5.ViewResolver接口--视图解析接口 继承体系: 5.View接口--视图接口 二.SpringMVC项目示例 (1)建立动态we ...
- Getting Started with Amazon EC2 (1 year free AWS VPS web hosting)
from: http://blog.coolaj86.com/articles/getting-started-with-amazon-ec2-1-year-free-aws-vps-web-host ...