[PKU 2823]Sliding Windows(单调队列版)
2009-09-24 14:01
501 查看
【题目大意】:见上篇日志
【题目分析】:
经过对该题的重新分析,得出如下算法。
开一个单调队列,然后记录单调队列中元素对应原序列中的位置以及原序列中的数对应单调队列中的位置,如果不在队列中或改数已过期,那么标记为-1。
然后运用单调队列进行筛选,开始时将前m个元素进行进队。然后从第m+1个元素开始,首先标记第i-m个元素为过期,然后将单调队列中前面的过期的数出队,然后将新的数插入,那么队头就是新的最值。
【代码(我冲进ranklist前10的代码~)】
【题目分析】:
经过对该题的重新分析,得出如下算法。
开一个单调队列,然后记录单调队列中元素对应原序列中的位置以及原序列中的数对应单调队列中的位置,如果不在队列中或改数已过期,那么标记为-1。
然后运用单调队列进行筛选,开始时将前m个元素进行进队。然后从第m+1个元素开始,首先标记第i-m个元素为过期,然后将单调队列中前面的过期的数出队,然后将新的数插入,那么队头就是新的最值。
【代码(我冲进ranklist前10的代码~)】
program PKU_2823; var a,q,qlink,link:array[1..1000000] of longint; n,m,i,front,rear:longint; begin assign(input,'a.in'); assign(output,'a.out'); reset(input); rewrite(output); readln(n,m); for i:=1 to n do read(a[i]); q[1]:=a[1]; link[1]:=1; qlink[1]:=1; front:=1; rear:=1; for i:=2 to m do begin inc(rear); while (rear>front) and (a[i]<q[rear-1]) do begin dec(rear); link[qlink[rear]]:=-1; end; qlink[rear]:=i; link[i]:=rear; q[rear]:=a[i]; end; write(q[front]); for i:=m+1 to n do begin link[i-m]:=-1; while (link[qlink[front]]=-1) and (front<=rear) do inc(front); inc(rear); while (rear>front) and (a[i]<q[rear-1]) do begin dec(rear); link[qlink[rear]]:=-1; end; qlink[rear]:=i; link[i]:=rear; q[rear]:=a[i]; write(' ',q[front]); end; writeln; q[1]:=a[1]; link[1]:=1; qlink[1]:=1; front:=1; rear:=1; for i:=2 to m do begin inc(rear); while (rear>front) and (a[i]>q[rear-1]) do begin dec(rear); link[qlink[rear]]:=-1; end; qlink[rear]:=i; link[i]:=rear; q[rear]:=a[i]; end; write(q[front]); for i:=m+1 to n do begin link[i-m]:=-1; while (link[qlink[front]]=-1) and (front<=rear) do inc(front); inc(rear); while (rear>front) and (a[i]>q[rear-1]) do begin dec(rear); link[qlink[rear]]:=-1; end; qlink[rear]:=i; link[i]:=rear; q[rear]:=a[i]; write(' ',q[front]); end; writeln; close(input); close(output); end.
相关文章推荐
- 【单调队列】poj 2823 Sliding Windows
- POJ 2823 Sliding Windows(单调队列)
- Sliding Window POJ - 2823 单调队列
- poj2823 Sliding Windows(单调队列果题)
- Sliding Window POJ - 2823 单调队列
- Sliding Window POJ - 2823 单调队列
- POJ 2823 Sliding Window + 单调队列
- POJ 2823 Sliding Window/单调队列
- Sliding Window POJ - 2823 单调队列
- pku 2823(单调队列、线段树)
- [POJ 2823] Sliding Window · 单调队列
- 单调队列 - 兼 ACM PKU POJ 3250 及 2823 解题报告
- [NOIP模拟][POJ 2823][单调队列]滑动的窗户(Sliding Window)
- POJ 2823 Sliding Window + 单调队列
- 单调队列学习 PKU2823
- Sliding Window POJ - 2823 单调队列
- 单调队列 - 兼 ACM PKU POJ 3250 及 2823 解题报告 [转]
- Sliding Window POJ - 2823 单调队列
- POJ 2823:Sliding Window 单调队列
- [poj2823]sliding windows(单调队列模板题)