[題目描述]
現在有n個布丁排成一排,每個布丁都有一個正整數顏色。
有m個操作:
第一種操作1 x y 將所有顏色爲x改爲顏色y。
第二種操作2 詢問當前有多少段顏色。
[數據範圍]n,m<=100000
[題解]
考試時只想到每個顏色建一棵平衡樹,進行啓發式合併,寫的時候各種蛋疼.
知道正解之後發現自己對數據結構和複雜度分析真的是一竅不通.
對每個顏色建一個鏈表,每次合併時啓發式合併,遍歷一遍短的鏈表修改顏色並更新ans,詢問時直接輸出即可.
每次合併是O(短鏈表長度)的.由於每次合併短鏈表都會增大2倍,所以最多增大log(n)次,因此總的複雜度是O(nlog(n)).
昨天的分塊也沒想出來,今天的啓發式合併也沒有搞出來,我還是太弱了.
BY QW
轉載請註明出處