POJ 2823【单调队列】
题意:
给出序列,找出每个连续长度为k的子序列的最大值和最小值。
思路:
裸单调队列...
单调队列这东西用的真的非常局限,大概只能用到这种情景中==
简单说一下维护:
添加元素,为了保持单调性,排除队尾所有比要添加的元素大或者小的元素。
出队,出队之前要保证要出队的元素在当前范围内,如果不在先把不在的都出队。
这题可以只记录索引号,所以内存还是可以优化的,懒得写了。
坑:
复制自己的两段代码忘记改其中一个大于号。WA了一上午。不要不要的。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct st
{
int num,pos;
};
int tmp[];
st ansma[];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%d",&tmp[i]);
}
if(m==)
{
for(int i=;i<=n;i++)
{
printf("%d",tmp[i]);
if(i!=n)
printf(" ");
}
printf("\n");
for(int i=;i<=n;i++)
{
printf("%d",tmp[i]);
if(i!=n)
printf(" ");
}
printf("\n");
return ;
}
int st,ed;
st=;ed=;
ansma[].num=tmp[];
ansma[].pos=;
for(int i=;i<m;i++)
{
while(tmp[i]<=ansma[ed].num&&ed>=st)
{
ed--;
}
ed++;
ansma[ed].num=tmp[i];
ansma[ed].pos=i;
}
for(int i=m;i<=n;i++)
{
while(tmp[i]<=ansma[ed].num&&ed>=st)
{
ed--;
}
ed++;
ansma[ed].num=tmp[i];
ansma[ed].pos=i;
while(ansma[st].pos<=i-m&&st<ed)
{
st++;
}
printf("%d",ansma[st].num);
if(i!=n)
printf(" ");
}
printf("\n");
st=;ed=;
ansma[].num=tmp[];
ansma[].pos=;
for(int i=;i<m;i++)
{
while(tmp[i]>=ansma[ed].num&&ed>=st)
{
ed--;
}
ed++;
ansma[ed].num=tmp[i];
ansma[ed].pos=i;
}
for(int i=m;i<=n;i++)
{
while(tmp[i]>=ansma[ed].num&&ed>=st)
{
ed--;
}
ed++;
ansma[ed].num=tmp[i];
ansma[ed].pos=i;
while(ansma[st].pos<=i-m&&st<ed)
{
st++;
}
printf("%d",ansma[st].num);
if(i!=n)
printf(" ");
}
printf("\n");
}
POJ 2823【单调队列】的更多相关文章
- Sliding Window POJ - 2823 单调队列模板题
Sliding Window POJ - 2823 单调队列模板题 题意 给出一个数列 并且给出一个数m 问每个连续的m中的最小\最大值是多少,并输出 思路 使用单调队列来写,拿最小值来举例 要求区间 ...
- caioj 1172 poj 2823 单调队列过渡题
给定一个n个数的数列,从左至右输出每个长度为m的数列段内的最大数. 输入:第一行两个整数n和m( 1<= n <= 20 0000,m<=n).下来给出n个整数. 输出:一行一个整数 ...
- poj 2823 单调队列
思路:裸的单调队列. #include<iostream> #include<cstring> #include<cstdio> #include<algor ...
- POJ 2823 单调队列入门水题
最最基础的单调队列题目.一个单增一个单减.还是可以借此好好理解一下单调队列的. #include <stdio.h> #include <string.h> #include ...
- poj 2823单调队列模板题
#include<stdio.h>//每次要吧生命值长的加入,吧生命用光的舍弃 #define N 1100000 int getmin[N],getmax[N],num[N],n,k, ...
- POJ 2838 单调队列
Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 55309 Accepted: 15911 ...
- poj 3017 单调队列优化动态规划
思路:dp[i]=min{dp[j]+max(num[j+1]...num[i])},其中sum[i]-sum[j]<=m. 那么我们需要用单调队列维护j到i的最大值. #include< ...
- poj 2373 单调队列优化背包
思路:我们用单调队列保存2*b<=i-j<=2*a中的最大值.那么队列头就是最大值,如果队头的标号小于i-2*b的话,就出队,后面的肯定用不到它了. #include<iostrea ...
- POJ 3017 单调队列dp
Cut the Sequence Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 8764 Accepted: 2576 ...
- POJ 1821 单调队列+dp
题目大意:有K个工人,有n个墙,现在要给墙涂色.然后每个工人坐在Si上,他能刷的最大范围是Li,且必须是一个连续子区间,而且必须过Si,他刷完后能获得Pi钱 思路:定义dp[i][j]表示前i个人,涂 ...
随机推荐
- ant脚本编写
使用ant脚本前的准备 1.下载一个ant安装包.如:apache-ant-1.8.4-bin.zip.解压到E盘. 2.配置环境变量.新增ANT_HOME:E:\apache-ant-1.8.4:P ...
- childNodes、nodeName、nodeValue 以及 nodeType
nodeName.nodeValue 以及 nodeType 包含有关于节点的信息. nodeName 属性含有某个节点的名称. 元素节点的 nodeName 是标签名称属性节点的 nodeName ...
- 如何破解海蜘蛛ISP6.1.5 极其isp运营商 v6.1.5
海蜘蛛ISPV6.1.5,目前破解版本中最稳定的!破解步骤如下:一.安装完毕进控制台二.使用muddyboot登陆 密码(123456)三.输入root回车四.输入regtools回车五.在web控制 ...
- 算法篇——Cantor的数表
来源:<算法竞赛入门经典>例题5.4.1 题目:现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 第一项是1/1,第二项是是1/ ...
- 【shell】nmap工具的使用
NMap,也就是Network Mapper,是Linux下的网络扫描和嗅探工 具包,其基本功能有三个,一是探测一组主机是否在线:其次是扫描主机端口,嗅探所提供的网络服务:还可以推断主机所用的操作系统 ...
- 理解Javascript参数中的arguments对象
ECMAScript中函数没有标签名的特性,所以ECMAScript函数中没有重载. Javascript中arguments的存在可以弥补javascript中函数没有重载的不足. Javascri ...
- 战胜忧虑<2>——忙碌可以消除忧虑
忙碌可以消除忧虑 当你的脑筋空出来时,也会有东西进去补充,是什么呢?通常都是你的感觉.为什么?因为忧虑.恐惧.憎恨.嫉妒.和羡慕等等情绪,都是由我们的思想所控制的,这种情绪都非常猛烈.会把我们思想中所 ...
- 【linux】之虚拟机的使用
VMware常用的配置 1.虚拟机快照设置 2.虚拟机克隆 分为链接克隆和完整克隆 链接克隆不占用过大的资源,但是主机删除之后,克隆机无法正常使用 完整克隆,占用空间资源,和主机之间互不影响 一般常用 ...
- .NET简谈构件系统开发模式
转自[王清培] http://www.cnblogs.com/wangiqngpei557/archive/2011/06/14/2080416.html 在本人的“.NET简谈插件系统开发模式”一文 ...
- 黄聪:C#中WebClient自动判断编码是UTF-8还是GBK,并且有超时判断功能
public class WebDownload : WebClient { private int _timeout; /// <summary> /// 超时时间(毫秒) /// &l ...