1113: [Poi2008]海报PLA

本文介绍如何通过单调栈解决覆盖N个矩形所需最少海报数量的问题,详细解释了算法逻辑并提供了一个高效的实现方式。

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

Sample Output

4

HINT

 

Source

 

题解:一个萌萌哒单调栈,详解如下吧(显然,宽度啥的不知道作用在哪里= =,鸣谢 ZYF-ZYF神犇,祝RP++,虐场++)

题解:

ans最多等于n,那么什么情况下ans可以减小呢

首先如果减少了,肯定是贴了一张海报,覆盖住两张高度相同的矩形(宽度是打酱油的。。。)

那么就如果 h[i]=h[j] 那么就得保证 i 与 j 之间没有 比它们高度更小的了

咦?想到了什么,对了,单调栈!维护一个单调递减栈,当该元素=栈顶元素时ans--,并将栈顶元素弹栈

 1 /**************************************************************
 2     Problem: 1113
 3     User: HansBug
 4     Language: Pascal
 5     Result: Accepted
 6     Time:3884 ms
 7     Memory:8040 kb
 8 ****************************************************************/
 9  
10 var
11    i,k,l,m,n:longint;j:int64;
12    a:array[0..1000005] of int64;
13 begin
14      readln(n);l:=n;k:=0;
15      for i:=1 to n do
16          begin
17               readln(j,j);
18               while j<=a[k] do
19                     begin
20                          if j=a[k] then dec(l);
21                          dec(k);
22                     end;
23               inc(k);a[k]:=j;
24          end;
25      writeln(l);
26 end.

 

转载于:https://www.cnblogs.com/HansBug/p/4474468.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值