感觉这道题跟当晚的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=0maxi−1{
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

597

被折叠的 条评论
为什么被折叠?



