二维带权数颜色。
根据套路,采用莫队套二维分块,没写过去看 P7448
。
一维带权数颜色谁都会,记每个颜色的上一个与其颜色相同的位置 p r e pre pre,问题转化为查询区间 [ l , r ] [l,r] [l,r] 中 p r e < l pre<l pre<l 的数的个数。
然后转成二维数点的形式,有 n n n 个点 ( i , p r e i ) (i,pre_i) (i,prei),查询 [ l , r ] [ 0 , l ) [l,r][0,l) [l,r][0,l) 这个矩阵的和,带修。
再考虑二维,选一维度跑莫队。
剩下的就是维护 p r e pre pre,然后动态二维数点,跑 O ( 1 ) − O ( n ) \mathcal O(1)-\mathcal O(\sqrt n) O(1)−O(n) 二维分块即可。
对于散块,考虑到 p r e pre pre 独特的性质:除了有多个位置 p r e i = 0 pre_i=0 prei=0 之外其余 p r e pre pre 互不相等。于是对于 p r e i = 0 pre_i=0 prei=0 的情况,写个一维分块维护,其他均摊复杂度正确。
考虑到这个莫队删除容易,增加爆炸,故使用回滚莫队。
时间复杂度 O ( n n ) \mathcal O(n\sqrt n) O(nn),空间复杂度 O ( n ) \mathcal O(n) O(n)。