DTOJ 4772. Befuddle

題意

Lyra 最近剛剛得到由小寫字母構成的長度爲 nn 的字符串 ss,下標爲 [1,n][1,n]。 Evan 覺得傳統的字符串詢問 Lyra 都能輕鬆解決,於是給出了 mm 個複雜的詢問,每個詢問包含五個參數 X,A,B,L,RX,A,B,L,R,你需要找出原字符串的一個子串 t=s[i,j]t = s_{[i,j]},滿足 tt[L,R][L,R] 區間內,長度在 [A,B][A,B] 區間內,包含恰好 XX 種不同的字符。如果有這樣多個 i,ji,j,輸出 ii 最小的那個,若仍有多個 jj 滿足條件,選擇最小的 jj,無解輸出 1,1−1,−1

對於全部數據, 1n,m105,1LRn,1ABn,1X261 \le n, m \le 10^5, 1 \le L \le R \le n, 1 \le A \le B \le n, 1 \le X \le 26

Subtask 1[6pts] n100n \le 100

Subtask 2[9pts] n1000n \le 1000

Subtask 3[17pts] A=1,B=nA = 1,B = n

Subtask 4[17pts] L=1,R=nL = 1, R = n

Subtask 5[17pts] 所有詢問的 XX 都相等.

Subtask 6[34pts] 沒有特殊限制

題解

思路比較清晰的一道數據結構題,原本想的方向也是對的,但以爲限制有很多不可做,沒有好好分析導致自閉。

首先對於每種xx分開做,顯然每個起點到達的終點是一段連續區間(容易預處理)。
設每個點爲(p,x,y)(p,x,y)表示起點在pp,終點在[x,y][x,y],發現x,yx,y是隨pp不降的。
於是對於每個詢問(a,b,l,r)(a,b,l,r),相當於要求最小的pp,使得max(p+a1,x)min(y,r,p+b1)max(p+a-1,x) \le min(y,r,p+b-1)lpl\le p
拆開後簡化一下就是求xp+1<=bx-p+1<=byp+1>=ay-p+1>=apxrp\le x\le r的最小pp
對於pxrp\le x\le r可以利用(p,x,y)(p,x,y)的單調性二分得出pp的區間(L,R)(L,R),於是將詢問按照bb升序,每個詢問求區間內ayp+1a\le y-p+1的最小的pp,用線段樹單點修改+區間二分即可維護。

原本還不太會證區間二分的效率,對於詢問(a,b,x)(a,b,x),可以把[a,b][a,b]分爲loglog個區間,只會在第一個有x\ge x的區間二分下去並且找到,所以效率就是一個loglog了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章