Codeforces CF1483C Skyline Photo 题解

题目链接
翻译
我的洛谷Blog

感觉这道题跟当晚的ARC E 撞了,虽然并不是完全一样。
结果我ARC E和这道题都没有在赛时做出来/kk。

这里记 a i , b i a_i,b_i ai,bi 为第 i i i 个楼房的高度和美丽值。
我们设 f i f_i fi 为前 i i i 栋房屋可以得到的最大美丽值,且 val ⁡ ( l , r ) \operatorname{val}(l,r) val(l,r) 表示区间 [ l , r ] [l,r] [l,r] 内最矮的楼房的美丽值。
那么显然我们可以得到一个 O ( n 2 ) \mathcal O(n^2) O(n2) 的转移:
f i = max ⁡ j = 0 i − 1 { f j + val ⁡ ( j + 1 , i ) } f_i=\max\limits_{j=0}^{i-1}\{f_j+\operatorname{val}(j+1,i)\} fi=j=0maxi1{ fj+val(j+1,i)}

由于 f j f_j fj 转移到 f i f_i fi 时,只需要用到他们之间的最矮的楼房,所以我们考虑用单调栈来维护所有可能用到的楼房。

维护一个单调递增的栈 c c c(栈中存的是楼房编号),记 c n t cnt cnt c c c 的大小,满足 a c i < a c i + 1   ∣   ( 1 ≤ i < c n t ) a_{c_i}<a_{c_{i+1}}\space|\space (1 \le i < cnt) aci<a

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值