洛谷 P1440 求m区间内的最小值

来源:互联网 发布:网络视频格式有哪些 编辑:程序博客网 时间:2024/06/07 05:19

题目大意:

一个含有n项的数列,求出每一项前的m个数到它这个区间内的最小值。若前面的数不足m项则从第1个数开始,若前面没有数则输出0。

m≤n≤2000000

题解:

这题就是一道单调队列的模板,
不过每次到第i个时求的是[i-m,i-1]的最小值,所以不要到i,然后就套单调队列。
单调队列不会的可以去看一下我的另一篇博文。
http://blog.csdn.net/gx_man_vip/article/details/78554177
时间复杂度:O(n)

var   a,min:Array [0..2000001] of longint;   i,n,m,phead,qtail:longint;begin   readln(n,m);   phead:=1; qtail:=0;   for i:=1 to n do     begin         read(a[i]);         if (min[phead]<i-m) then inc(phead);         while (phead<=qtail) and (a[i]<a[min[qtail]]) do dec(qtail);         writeln(a[min[phead]]);         qtail:=qtail+1;         min[qtail]:=i;     end;end.
阅读全文
0 0
原创粉丝点击