这是一道题意简单,数据较大的题(喜闻乐见);

一开始可能会想到RMQ问题,ST,线段树都是O(nlogn),应该勉强能过(没试过);

由于这道题区间是滚动连续的,所以,可以使用单调队列!

以最小值为例:

对于a[i],a[j],i>j;

如果a[i]<a[j],那么在加入i到滚动窗口中,找最小值一定不用考虑a[j];

因为a[j]比a[i]要先退出窗口,且即便i,j都在窗口中,那么a[j]一定不是最小值(a[i]<a[j]);

所以我们维护一个单调升序队列,对于新加入的元素,如果比队尾元素大,那么在队尾处入队(可能成为某个区间最小值);

否则的话,找打一个合适的位置m使之前位置的树比它小,后面的数比它大,同时将位置m后面的数全部退队;

由于单调队列是随着下标递增的,那么对于滚动窗口滚出的元素,从队头判断即可。

 var ans:array[..,..] of longint;
a,w:array[..] of longint;
h,f,r,mid,m,n,i,v:longint;
begin
readln(n,m);
for i:= to n do
read(a[i]);
a[]:=-;
for i:= to n do
begin
if a[i]>a[w[h]] then
begin
h:=h+;
w[h]:=i;
end
else begin
f:=;
r:=h;
repeat
mid:=(f+r) div ;
if (a[w[mid]]>=a[i]) and (a[w[mid-]]<a[i]) then break;
if (a[w[mid]]>=a[i]) then r:=mid- else f:=mid+;
until f>r;
h:=mid;
w[h]:=i;
end;
if i>=m then
begin
f:=;
r:=h;
v:=;
repeat
mid:=(f+r) div ;
if w[mid]<i-m+ then f:=mid+;
if w[mid]>=i-m+ then
begin
v:=mid;
r:=mid-;
end;
until f>r;
ans[i-m+,]:=a[w[v]];
end;
end;
a[]:=;
h:=;
fillchar(w,sizeof(w),);
for i:= to n do
begin
if a[i]<a[w[h]] then
begin
h:=h+;
w[h]:=i;
end
else begin
f:=;
r:=h;
repeat
mid:=(f+r) div ;
if (a[w[mid]]<=a[i]) and (a[w[mid-]]>a[i]) then break;
if (a[w[mid]]<=a[i]) then r:=mid- else f:=mid+;
until f>r;
h:=mid;
w[h]:=i;
end;
if i>=m then
begin
f:=;
r:=h;
v:=;
repeat
mid:=(f+r) div ;
if w[mid]<i-m+ then f:=mid+;
if w[mid]>=i-m+ then
begin
v:=mid;
r:=mid-;
end;
until f>r;
ans[i-m+,]:=a[w[v]];
end;
end;
for i:= to n-m+ do
write(ans[i,],' ');
writeln;
for i:= to n-m+ do
write(ans[i,],' ');
writeln;
end.

单调队列,关键在于看出题目中的单调性;

还有单调队列一般存放标号比较方便

poj2823的更多相关文章

  1. 【poj2823】 Sliding Window

    http://poj.org/problem?id=2823 (题目链接) 题意 维护滑动窗口最大最小值. Solution sb单调队列 代码 // poj2823 #include<algo ...

  2. POJ2823 Sliding Window (单调队列)

    POJ2823 Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 38342   Accepte ...

  3. poj2823:单调队列入门题

    今天学习了一下单调队列这种数据结构,思想不是很难 参考资料:http://www.cnblogs.com/Jason-Damon/archive/2012/04/19/2457889.html 然后自 ...

  4. poj2823 单调队列初步

    什么是单调队列:头元素一直是队列当中的最大值,队列中的值按照递减顺序排列,可以从末尾插入一个元素,或从两段删除元素 1.插入元素,为了保证队列的单调性(这里假设为递减性),在插入元素v时要将对位的元素 ...

  5. 刷题向》POJ2823 单调队列裸题(<不会做,请自裁>系列)

    最近BZOJ炸了,而我的博客上又更新了一些基本知识,所以这里刷一些裸题,用以丰富知识性博客 POJ2823   滑动的窗口 这是一道经典的单调队题,我记得我刚学的时候就是用这道题作为单调队列的例题,算 ...

  6. poj2823/hdu3415 - 数据结构 单调队列

    poj2823 题目链接 长度为N的数组,求宽度k的滑动窗口在数组上滑动时窗口内的最大值或最小值 如果用单调队列做,求最小值时,队列应该严格递增的.所以插入时,队尾大于等于插入值的元素都应被舍弃,因为 ...

  7. POJ2823 单调队列

    POJ2823 http://poj.org/problem?id=2823 最基础的单调队列,说是数据结构,其实就是一种更新数组数据的方法. 之前还准备用deque,超时了,直接head,tail快 ...

  8. POJ2823 Sliding Window

    Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 53086   Accepted: 15227 Case Time Limi ...

  9. POJ2823 Sliding Window(单调队列)

    题目要输出一个序列各个长度k的连续子序列的最大值最小值. 多次RMQ的算法也是能过的,不过单调队列O(n). 这题,队列存元素值以及元素下标,队尾出队维护单调性然后入队,队首出队保持新元素下标与队首元 ...

  10. 双端队列(单调队列)poj2823 区间最小值(RMQ也可以)

    Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 41844   Accepted: 12384 ...

随机推荐

  1. [大牛翻译系列]Hadoop(6)MapReduce 排序:总排序(Total order sorting)

    4.2.2 总排序(Total order sorting) 有的时候需要将作业的的所有输出进行总排序,使各个输出之间的结果是有序的.有以下实例: 如果要得到某个网站中最受欢迎的网址(URL),就需要 ...

  2. C++ 编写 CorelDRAW CPG 插件例子(1)—WelcomeScreen

    据我所知,这是国外论坛最早的一个例子,原贴在此:http://forum.oberonplace.com/showthread.php?t=1880&highlight=Plugins 贴上主 ...

  3. java se doc

    J2SE 5.0 Performance White Paper http://www.oracle.com/technetwork/java/5-136747.html Java Tuning Wh ...

  4. linux 历史命令用法(转)

    许多使用过Linux一段时间的人通过一些基础操作已经能够把Linux各方面基本玩转,但是如果没有经过系统学习的话就容易缺乏一些实战技巧.这系列文章介绍一些关于bash的能够提高效率的技巧,主要是关于历 ...

  5. play2 控制台打印乱码问题

    修改 play安装目录下,framework/build.bat java -Xms512M -Xmx1024M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:Ma ...

  6. 1059: [ZJOI2007]矩阵游戏 - BZOJ

    Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏.矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两 ...

  7. MySQL Replication 常用架构

    转自: http://www.cnblogs.com/ggjucheng/archive/2012/11/13/2768879.html 前言 MySQLReplicaion本身是一个比较简单的架构, ...

  8. C++函数中那些不可以被声明为虚函数的函数

    转自C++函数中那些不可以被声明为虚函数的函数 常见的不不能声明为虚函数的有:普通函数(非成员函数):静态成员函数:内联成员函数:构造函数:友元函数. 1.为什么C++不支持普通函数为虚函数? 普通函 ...

  9. 站长、运维必备| 网站可用性监控产品 OneAPM Cloud Test 上线

    白天太忙,到了晚上才发现网站一天都没有访问量? 直到有用户投诉才发现网站完全无法访问? 还要每月付费才能及时了解网站可用情况? 监控频率太低,不能及时发现网站不可用? 第三方服务宕机,导致您的网站不可 ...

  10. POJ 1061 青蛙的约会(扩展欧几里德)

    点我看题目 题意 : 中文题不详述. 思路 : 设经过s步后两青蛙相遇,则必满足(x+m*s)-(y+n*s) = K*L(k = 0,1,2....) 变形得:(n-m)*s+K*L = x-y ; ...