珂朵莉最可爱了。
好了不废话了,直接开始珂朵莉树。
什么是珂朵莉树
珂朵莉树,又叫老司机树,英文名字 ODT \text{ODT} ODT,是一种支持区间平推的乱搞数据结构,在数据随机时表现十分优秀。
操作
定义
珂朵莉树有链表和集合( set \text{set} set) 两种定义方法,一般来说,使用 set \text{set} set 定义的比较普遍。
珂朵莉树的思想主要是将所有颜色相同(也就是数值相同)的区间缩成一个一个的块,将这些块的左右端点插入 set \text{set} set ,再进行后续操作。
举个小栗子,比如我现在有数列 a = { 1 , 1 , 2 , 2 , 1 , 1 , 1 , 3 } a = \{ 1, 1, 2, 2, 1, 1, 1, 3\} a={ 1,1,2,2,1,1,1,3},那么珂朵莉树里就应该存的是这样的信息:
s = { { 1 , 2 , 1 } , { 3 , 4 , 2 } , { 5 , 7 , 1 } , { 8 , 8 , 3 } } s = \{\{1, 2, 1\}, \{3, 4, 2\}, \{5, 7, 1\}, \{8, 8, 3\}\} s={ { 1,2,1},{ 3,4,2},{ 5,