CSP2019模擬 DTOJ 4597 拙者

2021-09-28 20:29:01 字數 931 閱讀 6037

給定乙個長度為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的矩形...