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

一开始可能会想到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. slider jq小插件

    html代码 <div class="r_list r_1" style="display:block;"> <div class=" ...

  2. 让Ecshop网店系统用户自动登陆

    让Ecshop网店系统用户户自动登陆,打开ecshop includes/init.php文件,可以发现Ecshop系统判断用户的SESSION不存在的时候会去读取存储在COOKIES里面的值.如下代 ...

  3. C++ 容器及选用总结

    目录 ==================================================== 第一章 容器 第二章 Vector和string 第三章 关联容器 第四章 迭代器 第五 ...

  4. 因程序问题引起的服务器CPU负荷一直保持在90%以上

    昨天早上刚到办公室,就接到客户的电话说其某台小型机的CPU负荷一直保持在90以上,告警短信发个不停,一直没有间断过.该服务器是一台IBM的小型机,性能应该还是不错的,出现这样的情况确实不太正常.登陆上 ...

  5. 【IOCP】 IOCP模型属于一种通讯模型- 较难

    http://baike.baidu.com/link?url=e9vXkKd2aHp8VDr1XTURdwQB4K85r28IYjeMwRIyuaXtsrCsXHY1eohiFgsDXRYRlj6x ...

  6. Linux Mint SmoothTask2的安装方法

    首先,先下载smooth task:点击这里下载 下载之后解压缩,里面有个install文件,点击打开: To install plasmoid unpack archive, go to the d ...

  7. java第六课 oop

    java oop 1.面向过程的结构化程序设计弊端:方法和数据结构都是毫无规律的定义在程序中任何位置        方法定义和方法要处理的数据结构也都是分开定义 2.对象:每new一次,就创建1个新对 ...

  8. HTTP幂等性

    http://www.cnblogs.com/weidagang2046/archive/2011/06/04/2063696.html 理解HTTP幂等性 基于HTTP协议的Web API是时下最为 ...

  9. 3111: [Zjoi2013]蚂蚁寻路 - BZOJ

    题目描述 Description在一个 n*m 的棋盘上,每个格子有一个权值,初始时,在某个格子的顶点处一只面朝北的蚂蚁,我们只知道它的行走路线是如何转弯,却不知道每次转弯前走了多长.蚂蚁转弯是有一定 ...

  10. 1071: [SCOI2007]组队 - BZOJ

    Description NBA每年都有球员选秀环节.通常用速度和身高两项数据来衡量一个篮球运动员的基本素质.假如一支球队里速度最慢的球员速度为minV,身高最矮的球员高度为minH,那么这支球队的所有 ...