【题解】HDU4467

分块

暴力

暴力1:修改O(1),查询O(m),总O(km)

暴力2:修改O(n),查询O(1),总O(kn)

分块——把两种暴力合二为一

根据点的度数差别对待#

定义常数S = sqrt(N),把所有的点分成2种,如果一个点的度数 >= S , 叫做大点,反之为小点

把所有的边分成3 *3 = 9种,(大-大边,小-小边,大-小边) * (黑-黑,白-白,黑-白)

修改大点:

​ 大点的数量<=M/S

​ 大大边的数量<=M/S

​ 直接改边。

​ 大小边,num[i] [0]维护相邻白点, num[i] [1]维护黑点

修改小点:度数小,改颜色,改所连边

即,大大和小小直接对边的总数修改,大小维护num数组

总复杂度:O(k*n^1.5)

分块概况

分块最常见对序列做分块;图分块;树分块;莫队

HDU4467 O (k*n^1.5) O(kN^1/3)

posted @ 2020-05-04 01:15  _Buffett  阅读(92)  评论(0编辑  收藏  举报