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个人,涂 ...
随机推荐
- wcf stream 不知道长度的情况下,读取stream
http://bbs.csdn.net/topics/360163784 string filepath = @"http://ww4.sinaimg.cn/thumbnail/6741e0 ...
- HackerRank "Kundu and Tree" !!
Learnt from here: http://www.cnblogs.com/lautsie/p/3798165.html Idea is: we union all pure black edg ...
- LintCode "Post Office Problem" !!!
* Non-intuitive state design class Solution { public: /** * @param A an integer array * @param k an ...
- Python 数据排序和列表迭代和列表推导应用
1.In-place sorting 原地排序 data=[6,4,5,2,3,1] print ('before sort', data) data.sort() print ('after sor ...
- VBA相关
--能否彻底隐藏某行或某列 用代码隐藏列,将其放在Private Sub Worksheet_SelectionChange(ByVal Target As Range)Columns(1).Enti ...
- Source insight 3572版本安装及An invalid source insight serial number was detected解决方法
Source insight有最新版3572.3.50.0076 下载连接:http://www.sourceinsight.com/down35.html, http://www.sourcei ...
- Javascript金额转化
//"123,456.78"----> 123456.78(float格式) function rmoney(s) { return parseFloat(s.replace ...
- java.util.concurrent
软件包 java.util.concurrent 的描述 在并发编程中很常用的实用工具类.此包包括了几个小的.已标准化的可扩展框架,以及一些提供有用功能的类,没有这些类,这些功能会很难实现或实现起来冗 ...
- C++ 常见崩溃问题分析
一.前言 从事自动化测试平台开发的编程实践中,遭遇了几个程序崩溃问题,解决它们颇费了不少心思,解决过程中的曲折和彻夜的辗转反侧却历历在目,一直寻思写点东西,为这段难忘的经历留点纪念,总结惨痛的教训带来 ...
- DBA_Oracle AWR Report性能监控报表(案例)
2014-08-22 Created By BaoXinjian