1. 程式人生 > >【POJ 3476】A Game with Colored Balls

【POJ 3476】A Game with Colored Balls

write 開始 有一個 每次 復雜 取出 all 如果 字符子串

POJ 3476

首先寫了個treap,然後常數太大tle了。。。
然後想了個極為復雜的方法,是一共7個dsu,3個bit,還有一個set。然後寫了一半就歇菜了。。。
然後看dxm的方法,是這樣做的:
首先我們用三個並查集分別維護以下信息:每一個位置左邊第一個沒被刪掉的,右邊第一個沒被刪掉的,它所在的相同字符子串的第一個位置。
然後我們還需要維護所有的相同字符子串的起始位置和長度,放在一個優先隊列裏面,為了取最大值。
然後還要存從第i位開始的那個相同字符子串的長度。
那麽我們每次從優先隊列中取出最大的那個子串,然後不斷地沿著右邊第一個沒被刪掉的往後跑,刪掉途中所有的,
然後看當前刪掉的相同字符子串的右邊一個相同字符子串和左邊一個是不是可以合並,如果可以那麽就把它們變成一個相同字符子串,壓到優先隊列中。這樣會發現優先隊列中有重復元素,那麽就還需要判斷一下當前取出來的相同字符子串是不是已經被幹掉了。

最後需要快速輸出來卡常。我甚至用了一個fwrite。。。

【POJ 3476】A Game with Colored Balls