題目描述很明確,現在的目標是均攤兩個操作的複雜度;
現在我們已知有兩種方法:
1.每次用o(1)的時間修改k值,用o(n)的時間直接模擬回答詢問;
2.每次修改了k值後用o(n)的時間更新所有答案,o(1)時間回答;
均攤這兩種操作,可以這樣做:
由於只可以從前往後跳,所以可以把跳躍路徑壓縮,更新時把壓縮的部分更新就可以了,實現用塊狀鍊錶實現,複雜度為o(n3/2);
其實塊狀鍊錶只不過是水過的,正解是用splay維護乙個括號序列:利用括號序列, 每次操作都是把一棵子樹砍下並且接在某個結點上, 那麼我們可以維護括號序列整段移動來完成這個操作. 同時為了回答詢問我們需要知道每個左括號的左邊有幾個未匹配的左括號, splay 可以維護這個值, 時間複雜度 o(nlogn);
由於splay巨大的常數因子,所以很不樂觀。。。
塊狀鍊錶幾十行,漂亮多了!
HNOI 2010 彈飛綿羊
要求維護乙個 n 個節點的森林,實現 m個詢問,其中包括 n 200,000m 100,000 動態樹的入門題。只需要實現ac cess 操作以及維護子樹大小si ze即可。其實我做這道題是為了找找寫動態樹的感覺,發現了不少要注意的細節。總結地說,越是基本的函式就越不能打錯,不然就要花好多的時間去查...
HNOI2010彈飛綿羊
話說我是冒著巨大的風險a這道題的 xc說不讓上其他oj 這題其實很簡單,每個點如果他能往後跳,那就只能跳到唯一的乙個,這顯然是跟森林,用lct就好,維護下size。突然變短 include include define fo i,a,b for int i a i b i define lc c x...
HNOI2010 彈飛綿羊
某天,lostmonkey發明了一種超級彈力裝置,為了在他的綿羊朋友面前顯擺,他邀請小綿羊一起玩個遊戲。遊戲一開始,lostmonkey在地上沿著一條直線擺上n個裝置,每個裝置設定初始彈力係數ki,當綿羊達到第i個裝置時,它會往後彈ki步,達到第i ki個裝置,若不存在第i ki個裝置,則綿羊被彈飛...