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个人,涂 ...
随机推荐
- Apache ab并发负载压力测试
由于现在网站都需要能够承受高并发要求的能力,所以当我们写完代码后,如果需要上线,最好都经过压力测试后,这样比较好 运行: 在Windows系统下,打开cmd命令行窗口,定位到apache安装目录的bi ...
- android 如何让文本中某个关键字高亮显示?
TextView tv = (TextView) findViewById(R.id.hello);SpannableString s = new SpannableString(getResourc ...
- jquery淡入淡出
html代码: <button id="b1" type="button">淡出</button> <button id=&quo ...
- FAQ unzip无法解压文件
[root@TEST144239 tmp]# unzip linx64_11gR2_database_1of2.zipArchive: linx64_11gR2_database_1of2.zipw ...
- 查看.Net Framework版本的方法
乐博网最新补充(乐博网一步步教你如何最快查看本机.net framework的版本): 方法一: 第一步: 打开“我的电脑“,在地址栏输入 %systemroot%\Microsoft.NET\Fr ...
- 程序员书单_java专项进阶篇
JDBC API数据库编程实作教材 http://download.csdn.net/detail/shenzhq1980/9145715 Java事务设计模式 http://download.csd ...
- php 导出csv文件
<?php $sql = "select * from members_sqzj order by id asc"; $result = $db->fetch_All( ...
- c# string 数组转 list
string str = "1,11,121,131"; var arr = str.Split(','); List<string> list = new List& ...
- 剑指offer系列19--栈的压入、弹出序列
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序 ...
- 【转】深入分析 iBATIS 框架之系统架构与映射原理
深入分析 iBATIS 框架之系统架构与映射原理 iBATIS 通过 SQL Map 将 Java 对象映射成 SQL 语句和将结果集再转化成 Java 对象,与其他 ORM 框架相比,既解决了 Ja ...