[题目描述]
现在有n个布丁排成一排,每个布丁都有一个正整数颜色。
有m个操作:
第一种操作1 x y 将所有颜色为x改为颜色y。
第二种操作2 询问当前有多少段颜色。
[数据范围]n,m<=100000
[题解]
考试时只想到每个颜色建一棵平衡树,进行启发式合并,写的时候各种蛋疼.
知道正解之后发现自己对数据结构和复杂度分析真的是一窍不通.
对每个颜色建一个链表,每次合并时启发式合并,遍历一遍短的链表修改颜色并更新ans,询问时直接输出即可.
每次合并是O(短链表长度)的.由于每次合并短链表都会增大2倍,所以最多增大log(n)次,因此总的复杂度是O(nlog(n)).
昨天的分块也没想出来,今天的启发式合并也没有搞出来,我还是太弱了.
BY QW
转载请注明出处