【t019】window(单调队列)
Time Limit: 2 second
Memory Limit: 256 MB
【问题描述】
给你一个长度为N 的数组,一个长为K的滑动的窗体从最左移至最右端,你只能见到窗口的K个数,每次窗体向右移动一位,如下表:
Window position Min value Max value
[1 3 -1] -3 5 3 6 7 -1 3
1 [3 -1 -3] 5 3 6 7 -3 3
1 3 [-1 -3 5] 3 6 7 -3 5
1 3 -1 [-3 5 3] 6 7 -3 5
1 3 -1 -3 [5 3 6] 7 3 6
1 3 -1 -3 5 [3 6 7] 3 7
你的任务是找出窗口在各位置时的Max value和Min value。
【输入格式】
第一行N,K,第二行为长度为N的数组
【输出格式】
第一行每个位置的Min value,第二行每个位置的Max value
【输入样例1】
8 3
1 3 -1 -3 5 3 6 7
【输出样例1】
-1 -3 -3 -3 3 3
3 3 5 5 6 7
数据规模
20%:N≤500;50%:N≤100000;100%:N≤1000000;
【题目链接】:http://noi.qz5z.com/viewtask.asp?id=t019
【题解】
最小值维护一个单调递增队列就能搞定;(a[i]<=a[i+1]
每次加入队列中的元素先和队尾比较一下,对于队尾比它大的数,直接删掉就好,因为要求的是最小值,而你加入的这个数是在框框里面的,那么如果你比这个数还大,那么你肯定没有存在的价值了;
然后对于队头元素,如果它不在框框里面也全都删掉,直到队头元素在框框里为止,然后输出队头元素;
最大值类似.
(可以在2s内出)
【完整代码】
#include <cstdio>
#include <algorithm>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
const int MAXN = 1e6+100;
int n,k,a[MAXN];
int m[MAXN],mm[MAXN],h,t;
int main()
{
//freopen("F:\\rush.txt","r",stdin);
scanf("%d%d",&n,&k);
for (int i = 1;i <= n;i++)
scanf("%d",&a[i]);
h = 1,t = 0;
for (int i = 1;i <= k-1;i++)
{
while (t>=h && m[t]>=a[i]) t--;
t++;
m[t] = a[i];mm[t] = i;
}
for (int i = k;i<= n;i++)
{
while (t>=h && m[t]>=a[i]) t--;
t++;
m[t] = a[i];mm[t] = i;
while (mm[h]<i-k+1 && h <= t) h++;
printf("%d",m[h]);
if (i==n)
puts("");
else
putchar(' ');
}
h = 1,t = 0;
for (int i = 1;i <= k-1;i++)
{
while (t>=h && m[t]<=a[i]) t--;
t++;
m[t] = a[i];mm[t] = i;
}
for (int i = k;i <= n;i++)
{
while (t>=h && m[t]<=a[i]) t--;
t++;
m[t] = a[i];mm[t] = i;
while (mm[h]<i-k+1 && h <= t) h++;
printf("%d",m[h]);
if (i==n)
puts("");
else
putchar(' ');
}
return 0;
}
【t019】window(单调队列)的更多相关文章
- POJ 2823 Sliding Window + 单调队列
一.概念介绍 1. 双端队列 双端队列是一种线性表,是一种特殊的队列,遵守先进先出的原则.双端队列支持以下4种操作: (1) 从队首删除 (2) 从队尾删除 (3) 从队尾插入 (4) ...
- poj 2823 Sliding Window (单调队列入门)
/***************************************************************** 题目: Sliding Window(poj 2823) 链接: ...
- POJ2823 Sliding Window(单调队列)
单调队列,我用deque维护.这道题不难写,我第二次写单调队列,1次AC. -------------------------------------------------------------- ...
- POJ 2823:Sliding Window 单调队列
Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 48930 Accepted: 14130 ...
- POJ 2823 Sliding Window (单调队列)
单调队列 加了读入挂比不加更慢.... 而且这份代码要交c++ 有大神G++跑了700ms..... orzorzorz #include<iostream> #include<cs ...
- POJ 2823 UESTCoj 1221 Sliding Window 单调队列 经典入门题
题意:给出一个序列,求出每连续k个数字中最大的数和最小的数. 这是道单调队列裸题,直接写就行了. 本来用deque写出来后,发现在poj上硬是超时了,在discuss上看很多人也在抱怨超时的问题,据说 ...
- poj2823Sliding Window——单调队列
题目:http://poj.org/problem?id=2823 单调队列模板. 代码如下: #include<iostream> #include<cstdio> usin ...
- POJ2823 Sliding Window (单调队列)
POJ2823 Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 38342 Accepte ...
- POJ 2823 Sliding Window(单调队列入门题)
Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 67218 Accepted: 190 ...
随机推荐
- [Vue + TS] Use Properties in Vue Components Using @Prop Decorator with TypeScript
With properties we can follow a one-way parent→child flow communication between components. This les ...
- Warning: Division by zero in 错误处理
Warning: Division by zero in 错误处理 今天调试一段代码,结果提示 Warning: Division by zero in ,没有扫到答案,最后发现 $dir/$name ...
- CSS外边距合并(塌陷/margin越界)
原文 简书原文:https://www.jianshu.com/p/5f18f12cd162 大纲 1.什么是外边距合并?(折叠外边距) 2.外边距带来的影响 3.折叠的结果 4.产生折叠的原因 5. ...
- Jquery+Ajax+Bootstrap Paginator实现分页的拼接
效果图如下 jsp页面引入bootstrap样式,jquery和bootstrap-paginator.js <link type="text/css" rel=" ...
- HDU 1556 Color the ball【算法的优化】
/* 解题思路:每次仅仅求解一開始的第一个数字,让第一个数字加一,最后的一个数字的后面一个数减一.我们能够想想,最后加的时候,就是加上前面一个数出现的次数和自己本身出现的次数. 解题人:lingnic ...
- MongoDbHelper 帮助类(下)
对MongoDbHelper帮助类进行了一下整合,但是代码中一个方法需要将string类型转化为BsonValue类型一直出错.所以欢迎留言指正 using System; using System. ...
- 3、U-boot的环境变量: bootcmd 和bootargs
u-bootcmdbootcmd是uboot自动启动时默认执行的一些命令,因此你可以在当前环境中定义各种不同配置,不同环境的参数设置,然后设置bootcmd为你经常使用的那种参数. 现在我的boo ...
- 部分城市关于.Net招聘数量
2016-12-09更新统计数据 上海 10730 北京 6322 广州 4157 深圳 3548 成都 2291 重庆 706 厦门 285 2015-01-30日,前程无忧搜索".Net ...
- 手动脱KBys Packer(0.28)壳实战
作者:Fly2015 吾爱破解培训第一课选修作业第5个练习程序.在公司的时候用郁金香OD调试该加壳程序的时候出了点问题,可是回家用吾爱破解版的OD一调试,浑身精神爽,啥问题也没有. 首先使用查壳工具对 ...
- Qt没有被正确安装,请运行make install问题的解决
在网上直接下载别人编译好的Qt库,为自己使用省了不少事.但往往也会遇到些问题,其中Qt version is not properly installed,please run make instal ...