题意:n个矩形排成一排,求用最少的矩形cover它们
显然最多n个,即一个矩形用一个去cover
考虑减少所用
对于两个高度相等的矩形,当用同一个矩形覆盖的时候,它们之间所有的矩形的高度都不低于它们的高度
此时答案减1
那么所求可转化为:我们对每一个矩阵,找到它左边第一个不高于它的矩阵,判断高度是否相等,如果相等则所用海报数量-1
此时这个模型一出,显然的裸单调栈
bzoj 1113
var
n,x,y,top,ans :longint;
i :longint;
z :array[0..250010] of longint;
begin
read(n); ans:=n;
read(x,y); z[1]:=y; top:=1;
for i:=2 to n do
begin
read(x,y);
while (top>0) and (y<z[top]) do dec(top);
if (z[top]=y) then dec(ans);
inc(top); z[top]:=y;
end;
writeln(ans);
end.
bzoj 1683 & bzoj 1628
var
n,m,x,top,ans :longint;
i :longint;
z,h :array[0..500010] of longint;
begin
read(n,m);
for i:=1 to n do
begin
read(x); read(h[i]);
end;
ans:=n;
for i:=1 to n do
begin
while (top>0) and (h[z[top]]>h[i]) do dec(top);
if h[i]=h[z[top]] then dec(ans);
inc(top); z[top]:=i;
end;
writeln(ans);
end.
——by Eirlys