pudding題解--鏈表的啓發式合併

[題目描述]

    現在有n個布丁排成一排,每個布丁都有一個正整數顏色。

    有m個操作:

    第一種操作1 x y 將所有顏色爲x改爲顏色y。

    第二種操作2     詢問當前有多少段顏色。

[數據範圍]

   n,m<=100000

[題解]

   考試時只想到每個顏色建一棵平衡樹,進行啓發式合併,寫的時候各種蛋疼.

   知道正解之後發現自己對數據結構和複雜度分析真的是一竅不通.

  對每個顏色建一個鏈表,每次合併時啓發式合併,遍歷一遍短的鏈表修改顏色並更新ans,詢問時直接輸出即可.

  每次合併是O(短鏈表長度)的.由於每次合併短鏈表都會增大2倍,所以最多增大log(n)次,因此總的複雜度是O(nlog(n)).

  昨天的分塊也沒想出來,今天的啓發式合併也沒有搞出來,我還是太弱了.


BY QW

轉載請註明出處

發佈了45 篇原創文章 · 獲贊 5 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章