給定乙個長度為n
nn的括號序列,有q
qq次操作如下:
1.把乙個位置p
pp的括號方向反轉。
2.詢問乙個區間[l,
r]
[l,r]
[l,r
],求把它變為乙個合法括號序列最小需要刪除的括號個數。
3.與2類似,但要求反過來看(即從r到l看,但括號方向不反轉)也是乙個合法括號序列。
資料範圍:n,q
≤300000
n,q\le300000
n,q≤30
0000
對於括號序列問題,考慮轉移到座標系上更直觀。
把區間[l,
r]
[l,r]
[l,r
]的括號序列看作在座標系上,以(l−
1,0)
(l-1,0)
(l−1,0
)為起點,對於每個位置,先向右走一步,是『(』則向上走一步,否則向下走一步。正著看合法即為沒有走到x軸下面。於是對於操作2顯然有一走到x
xx軸下方則刪掉(相當於把它後面的整個影象向上平移一格),答案即為走到的最低點的縱座標。
對於操作3,發現反過來合法即為從左向右看,最高點縱座標不超過r
rr的縱座標yryr
yr,如果僅滿足反向,做法也同理。考慮正反兩個方向結合,發現從左往右貪心時,yryr
yr受到的影響(即增加量)一定是最大的,故它與從後往前的貪心不衝突,又這個貪心一定會使向上平移的「量」盡量小,故先正著貪心再反著貪心一定是最優的。
考慮如何簡便地計算反著做的答案,通過畫圖發現正著做完後,對每乙個點,它的縱座標變為它與前面最小的縱座標的差值dxdx
dx,於是要求的就是區間dxdx
dx的最大值和dxr
dx_r
dxr
的差,用線段樹記錄區間和、最值、極差,單點修改區間查詢即可。
(CSP2019模擬)DTOJ 4629 世界
有乙個虛無的結界,隔開了兩個世界。人們在結界內遊蕩,而遠方的星辰在結界外。我們可以把結界看作 x xx 軸,那麼人們都在 x xx 軸下方,而星星都在 x xx 軸上方。人們本應該能看到所有的星星,但是結界外 x xx 軸上方 出現了幾座牆,擋住了人們的視線。牆是平行於 x xx 軸的。現在想問,每...
(CSP2019模擬)閱讀
有n nn個字串,每次可以把每個字串都標記至多乙個字首,但這些字首之間不能有包含關係,求把所有字串的所有字首都標記完的最小次數。資料範圍 n nn,字串總長 100000 le100000 10000 0 如果乙個字串s ss的字首a aa包含於另乙個字串t tt的字首b bb,那麼a aa是t t...
CSP2019模擬測試 遊戲
給定乙個n m n mn m的矩形方格紙,每次可以把它裁為兩個子矩形,若裁出乙個1 1 1 11 1則勝,判斷先手是否必勝。n 2000,m 2000 n le 2000,m le 2000 n 2000 m 2 000 直觀的想法是設f i j f i j f i j 為i ji j i j的矩形...