分块
暴力
暴力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)