1. 程式人生 > >bzoj 4059: [Cerc2012]Non-boring sequences

bzoj 4059: [Cerc2012]Non-boring sequences

題意

一個序列被稱為是不無聊的,僅當它的每個連續子序列存在一個獨一無二的數字,即每個子序列裡至少存在一個數字只出現一次。給定一個整數序列,請你判斷它是不是不無聊的。

題解

首先,一個很顯然的做法就是 對於每一個位置i,我們可以知道他作為獨一無二的值的區間有什麼 這個預處理上一個,下一個和他一樣的就可以了 然後就相當於這一段區間都是合法的 如果[l,r]看作一個點,明顯地,他可以覆蓋一個矩形 那麼就變成矩形面積並了 看一下是否覆蓋所有合法區間即可

但是這樣做這題就太沒有意思了。。

於是就有一個很好玩的做法 就是對於一個區間[l,r][l,r] 如果他的一個位置p,是獨一無二的,那麼我們顯然可以遞迴[

l,p1],[p+1,r][l,p-1],[p+1,r] 至於p怎麼找,你可以從序列的兩頭掃兩個指標 如果有一個符合就結束遞迴 複雜度的話,你會發現,形式是這樣的T(n)=T(k)+T(nk)+min(k,nk)T(n)=T(k)+T(n-k)+min(k,n-k) 容易發現,這東西就是啟發式合併,因此複雜度也是nlognnlogn的 無論從程式碼上還是從常數上都比第一個做法小得多