poj2823:单调队列入门题
今天学习了一下单调队列这种数据结构,思想不是很难
参考资料:http://www.cnblogs.com/Jason-Damon/archive/2012/04/19/2457889.html
然后自己写成了类的模板形式,并做了例题poj2823
代码如下:
#include <iostream>
#include <stdio.h>
#include<string.h>
#include<algorithm>
#include<string>
#include<ctype.h>
using namespace std;
#define maxn 10000010
typedef struct Node
{
int val;
int num;
}node;
typedef struct iqueue
{
node q[maxn];
int l,r;
void ini()
{
l=;
r=;
}
node front()
{
return q[l];
}
node pop()
{
l++;
return q[l-];
}
void push(node x)
{
if(r==l)
{
q[r++]=x;
return;
}
if(x.val>=q[l].val)
{
r=l;
q[r++]=x;
return;
}
while(r>=&&x.val>=q[r-].val)
{
r--;
}
q[r++]=x;
}
}Iqueue;
typedef struct dqueue
{
node q[maxn];
int l,r;
void ini()
{
l=;
r=;
}
node front()
{
return q[l];
}
node pop()
{
l++;
return q[l-];
}
void push(node x)
{
if(r==l)
{
q[r++]=x;
return;
}
if(x.val<=q[l].val)
{
r=l;
q[r++]=x;
return;
}
while(r>=&&(x.val<=q[r-].val))
{
r--;
}
q[r++]=x;
}
}Dqueue;
int big[];
int small[];
Iqueue qi;
Dqueue qd;
int main()
{
int n,k;
while(scanf("%d%d",&n,&k)!=EOF)
{
node x;
node s,b;
int t=;
qi.ini();
qd.ini();
for(int i=;i<=n;i++)
{
scanf("%d",&x.val);
x.num=i;
qi.push(x);
qd.push(x);
if(i>=k)
{
b=qi.front();
while(b.num<=i-k)
{
qi.pop();
b=qi.front();
}
s=qd.front();
while(s.num<=i-k)
{
qd.pop();
s=qd.front();
}
big[t]=b.val;
small[t++]=s.val;
}
}
for(int i=;i<t;i++)
{
printf("%d",small[i]);
if(i==t-)
puts("");
else
printf(" ");
}
for(int i=;i<t;i++)
{
printf("%d",big[i]);
if(i==t-)
puts("");
else
printf(" ");
}
}
return ;
}
poj2823:单调队列入门题的更多相关文章
- 刷题向》POJ2823 单调队列裸题(<不会做,请自裁>系列)
最近BZOJ炸了,而我的博客上又更新了一些基本知识,所以这里刷一些裸题,用以丰富知识性博客 POJ2823 滑动的窗口 这是一道经典的单调队题,我记得我刚学的时候就是用这道题作为单调队列的例题,算 ...
- POJ 2823 Sliding Window(单调队列入门题)
Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 67218 Accepted: 190 ...
- [Luogu P1886]滑动窗口--单调队列入门
题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ...
- poj 2823 Sliding Window (单调队列入门)
/***************************************************************** 题目: Sliding Window(poj 2823) 链接: ...
- luoguP1886 滑动窗口(单调队列模板题)
题目链接:https://www.luogu.org/problem/P1886#submit 题意:给定n个数,求大小为k的滑动窗口中最小值和最大值. 思路:单调队列模板题. AC代码: #incl ...
- Sliding Window POJ - 2823 单调队列模板题
Sliding Window POJ - 2823 单调队列模板题 题意 给出一个数列 并且给出一个数m 问每个连续的m中的最小\最大值是多少,并输出 思路 使用单调队列来写,拿最小值来举例 要求区间 ...
- POJ 2823 单调队列入门水题
最最基础的单调队列题目.一个单增一个单减.还是可以借此好好理解一下单调队列的. #include <stdio.h> #include <string.h> #include ...
- poj2823 单调队列初步
什么是单调队列:头元素一直是队列当中的最大值,队列中的值按照递减顺序排列,可以从末尾插入一个元素,或从两段删除元素 1.插入元素,为了保证队列的单调性(这里假设为递减性),在插入元素v时要将对位的元素 ...
- BZOJ1113 海报PLA1(单调栈入门题)
一,自己思考下 1,先自己思考下 N个矩形,排成一排,现在希望用尽量少的海报去cover住它们. 2,不懂. 着实不懂. 3,分析下,最优性问题对吧,然后就每什么想法了.. 虽然肯定和单调栈和单调队列 ...
随机推荐
- Highcharts教程2
参数配置(属性+事件) chart.events.addSeries:添加数列到图表中. chart.events.click:整个图表的绘图区上所发生的点击事件. chart.events.load ...
- [OGRE]看备注学编程(02):打地鼠01-布置场地九只地鼠
项目下载地址:http://download.csdn.net/detail/wxg694175346/6340347 头文件ShrewMouseApplication.h: #ifndef __Sh ...
- sql server里一些常用的查询
查看表的创建和更改时间: select * from sys.tables 查询数据库的创建时间: select * from sys.databases where name in ('数据 ...
- NPM与调试工具的使用
1)NPM 2)nodemon 自动监视文件的变化并重启应用 3)pm2 启动node,资源共享 4)node-inspector node调试工具 5)Chrome Developer Tools
- 2、第2节课html教程客户端控件/css第一课/20150917
1.<form> 标签 提交 <form action="http://www.baidu.com" method="post'> </fo ...
- Android-版本与api对应关系图
Code name Version API level Lollipop 5.1 API level 22 Lollipop 5.0 API level 21 KitKat 4.4 - 4.4.4 A ...
- arcgis engine - 命令和工具
在engine中, 命令是实现了 ICommand,我们可以通过使用 UID, progID 或 ICommand 将一个命令宿主到 ToolBarControl中. ICommand接口有一个 On ...
- apt-get install jdk
怕忘记,记录下: sudo apt-get install python-software-properties sudo add-apt-repository ppa:webupd8team/jav ...
- 2016/01/10 C++ Primer 小记 —— 命令行编译环境配置
OK!第一篇博文!自贺一下! 今日看了此书的前几页.嗯,说得挺全,基础易懂. 之前学过c++,但没用过命令行编译. 本人用的VS里的编译器,文件名是cl.exe,在VC目录下. 虽然有了编译器,但并不 ...
- 兄弟选择器 E + F
兄弟选择器在IE7下支持会有bug,特记于此 如果兄弟选择器有Html注释,兄弟选择器在IE7下会失效 代码如下 E + Fp + p{color:red} <p class="te ...