1113: [Poi2008]海报PLA
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 765 Solved: 466
[Submit][Status][Discuss]
Description
N个矩形,排成一排. 现在希望用尽量少的矩形海报Cover住它们.
Input
第一行给出数字N,代表有N个矩形.N在[1,250000] 下面N行,每行给出矩形的长与宽.其值在[1,1000000000]2 1/2 Postering
Output
最少数量的海报数.
Sample Input
5
1 2
1 3
2 2
2 5
1 4
1 2
1 3
2 2
2 5
1 4
Sample Output
4
HINT
Source
题解:一个萌萌哒单调栈,详解如下吧(显然,宽度啥的不知道作用在哪里= =,鸣谢 ZYF-ZYF神犇,祝RP++,虐场++)
题解:
ans最多等于n,那么什么情况下ans可以减小呢
首先如果减少了,肯定是贴了一张海报,覆盖住两张高度相同的矩形(宽度是打酱油的。。。)
那么就如果 h[i]=h[j] 那么就得保证 i 与 j 之间没有 比它们高度更小的了
咦?想到了什么,对了,单调栈!维护一个单调递减栈,当该元素=栈顶元素时ans--,并将栈顶元素弹栈
/**************************************************************
Problem:
User: HansBug
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/ var
i,k,l,m,n:longint;j:int64;
a:array[..] of int64;
begin
readln(n);l:=n;k:=;
for i:= to n do
begin
readln(j,j);
while j<=a[k] do
begin
if j=a[k] then dec(l);
dec(k);
end;
inc(k);a[k]:=j;
end;
writeln(l);
end.