POJ2823:Sliding Window
传送门
题意
有一个数列a,要求你求数列b和c,b[i]是a[i]…a[i+w-1]中的最小值,c[i]是最大值。如果a是1,3,-1,-3,5,3,6,7,则b为-1,-3,-3,-3,3,3,c为3,3,5,5,6,7。
分析
单调队列裸题,不过第一次写单调队列发现了很多trick
代码
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define F(i,a,b) for(int i=a;i<=b;++i)
#define R(i,a,b) for(int i=a;i<b;++i)
#define mem(a,b) memset(a,b,sizeof(a))
#pragma comment(linker, "/STACK:102400000,102400000")
inline void read(int &x){x=0; char ch=getchar();while(ch<'0') ch=getchar();while(ch>='0'){x=x*10+ch-48; ch=getchar();}}
int a[1001000],n,k,l,r,b[1001000];
pair<int,int>q[1001000];//1
int main()
{
//freopen("data.in","r",stdin);
//freopen("wa.out","w",stdout);
while(scanf("%d %d",&n,&k)==2)
{
R(i,0,n) scanf("%d",a+i);
l=r=0;
q[r++]=make_pair(0,a[0]);
R(i,1,k)
{
while(r&&a[i]<=q[r-1].second) r--;//2
q[r++]=make_pair(i,a[i]);
}
b[1]=q[l].second;
R(i,k,n)
{
while(r&&a[i]<=q[r-1].second) r--;
l=min(l,r);//3
q[r++]=make_pair(i,a[i]);
while(i-k>q[l].first-1) l++;//4
//printf("l=%d r=%d\n",l,r);
b[i-k+2]=q[l].second;
}
// R(i,0,r) printf("%d%c",q[i].second,i==r-1?'\n':' ');
F(i,1,n-k+1) printf("%d%c",b[i],i==n-k+1?'\n':' ');
l=r=0;
q[r++]=make_pair(0,a[0]);
R(i,1,k)
{
while(r&&a[i]>=q[r-1].second) r--;
q[r++]=make_pair(i,a[i]);
}
b[1]=q[l].second;
R(i,k,n)
{
while(r&&a[i]>=q[r-1].second) r--;
l=min(l,r);
q[r++]=make_pair(i,a[i]);
while(i-k>q[l].first-1) l++;
// printf("l=%d r=%d\n",l,r);
b[i-k+2]=q[l].second;
}
F(i,1,n-k+1) printf("%d%c",b[i],i==n-k+1?'\n':' ');
}
return 0;
}
/*
1.用pair记录每个放入队列的数的下标和值
2.从后往前找插入的位置,顺便删除后面的元素
3.更新左端点l
4.如果左端点的下标小于区域左端点,更逊左端点
*/
POJ2823:Sliding Window的更多相关文章
- POJ 2823:Sliding Window 单调队列
Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 48930 Accepted: 14130 ...
- 【poj2823】 Sliding Window
http://poj.org/problem?id=2823 (题目链接) 题意 维护滑动窗口最大最小值. Solution sb单调队列 代码 // poj2823 #include<algo ...
- 【POJ2823】Sliding Window
http://poj.org/problem?id=2823 题意:你有一个长度n的序列,分别询问[1,k],[2,k+1],[3,k+2],...,[n-k+1,n]这n-k+1个区间的最大值和最小 ...
- Sliding Window Matrix Maximum
Description Given an array of n * m matrix, and a moving matrix window (size k * k), move the window ...
- POJ2823 Sliding Window (单调队列)
POJ2823 Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 38342 Accepte ...
- codevs4373 窗口==poj2823 Sliding Window
Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 53676 Accepted: 15399 ...
- sliding window:"Marginalization","Schur complement","First estimate jacobin"
[1]知行合一2 SLAM中的marginalization 和 Schur complement SLAM的Bundle Adjustment上,随着时间的推移,路标特征点(landmark)和相机 ...
- 题解报告:poj 2823 Sliding Window(单调队列)
Description An array of size n ≤ 106 is given to you. There is a sliding window of size k which is m ...
- POJ2823 Sliding Window
Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 53086 Accepted: 15227 Case Time Limi ...
随机推荐
- Google SPDY
SPDY(读作“SPeeDY”)是Google开发的基于TCP的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验.SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强 ...
- python学习之-- redis模块操作 LIST
redis 模块操作之 List List 操作,在内存中按照一个name对应一个List来存储. lpush(name,values):在name对应的list中添加元素,每个新的元素都添加到列表的 ...
- Free命令详解和释放linux Cache(转载)
因为LINUX的内核机制,一般情况下不需要特意去释放已经使用的cache.这些cache起来的内容可以增加文件以及的读写速度. 先说下free命令怎么看内存 [root@yuyii proc]# fr ...
- sqlite中常见的问题总结
一.sqlite中不能使用日期进行相减,执行结果无效 例如:SELECT count(*) as cnt FROM DayBanalces WHERE (date(ofDay)- date('2013 ...
- C# Json反序列化 数据协定类型 无法反序列化 由于未找到必需的数据成员
背景今天在使用:C# Json 序列化与反序列化 反序列化的时候出现了以下的错误信息. System.Runtime.Serialization.SerializationException: 数据协 ...
- 纯C语言实现简单封装继承机制
0 继承是OO设计的基础 继承是OO设计中的基本部分,也是实现多态的基础,C++,C#,Objective-C.Java.PHP.JavaScript等为OO而设计的语言,其语言本身对实现继承提供了直 ...
- 【Mongodb教程 第一课 补加课1 】windows7 下安装mongodb 开启关闭服务
mongodb在2.2版本开始就不支持windows xp了(我想现在用xp的应该也是带着情怀的一部分人吧,我只是一个工匠而已),windows下server8 R2,64位,32位,只是32位只支持 ...
- 【iOS系列】-使用CAGradientLayer设置渐变色
有时候iOS开发中需要使用到渐变色,来给图片或者view盖上一层,使其显示效果更好,我们这里使用的CAGradientLayer来设置渐变色 要实现的效果如下: Demo地址---下载 // 创建渐变 ...
- (原创)EasyUI中datagrid的行编辑模式中,找到特定的Editor,并为其添加事件
有时候在行编辑的时候,一个编辑框的值要根据其它编辑框的值进行变化,那么可以通过在开启编辑时,找到特定的Editor,为其添加事件 // 绑定事件, index为当前编辑行 var editors = ...
- web前端开发 代码规范 及注意事项
web前端开发 代码规范 及注意事项 外部命名规范 html .js .css文件名称命名规范 my_script.js my_camel_case_name.css my_index.html 路径 ...