题解 P8261【[CTS2022] 袜子】
P8261 [CTS2022] 袜子 解题报告:
更好的阅读体验
题意
给定
分析
显然题意可以转化为数一个点下方每种颜色直线数量平方和。
如果只数直线数量是等价于 #553. 【UNR #4】己酸集合 的,做法是:
对序列分块,然后每个块算出直线两两之间的交点,将交点和询问都按照
令块长为
那么考虑根号分治一下,每个大颜色集合都可以直接数直线数量然后平方。(块数还是
小颜色集合由于可以利用的性质是直线数量很少,所以我们可以很方便地维护小块直线之间的顺序。
我们考虑将贡献拆成被数到的直线数量,加上二倍被数到的直线在颜色中的 rk 之和,那么就可以类似地对直线交点和询问排序,每条直线在颜色中的 rk 可以很方便的维护,但是直线全局的 rk 不能直接维护。
由于每个颜色出现次数都
那么直接维护直线块内 rk 以及一个树状数组保存 rk 前缀和,询问枚举块直接二分查询即可。
复杂度还是
令
代码
咕了,有时间写。