像潮落潮涌,送我奔向自由。|

寂静的海底

园龄:3年2个月粉丝:59关注:15

【题解】P5311 | 点分治 数据结构 数颜色

独立切掉的黑 Ynoi~~


首先无根树上连通块和路径的查询可以考虑点分治,进行点分治,每次统计包含分治中心的连通块。

因为连通性是可以传递的所以如果可以到达目前的分治中心,问题就转化成了以分治中心为根只经过 [l,r] 可以到达的颜色数,看上去就能做很多了。

通过一次 dfs 处理出分治中心到每个点需要经过最大最小编号 (pi,qi),接下来问题转化为平面上有若干带色点 (pi,qi,coli),每次数矩形 [0,l]×[r,+] 的颜色数,考虑使用经典套路,把询问看作二维平面上的点,考虑每种颜色可以贡献到的询问,即会对 pl,qr 的询问产生这个颜色的贡献,所以我们需要对这些右上矩形取并,并对这个区域加一,对这个右上的阶梯型加可以拆成轮廓上这些黑点的贡献。

每种颜色的矩形的个位数之和是 O(分治点数) 的,直接排序后使用一个指针扫出轮廓,然后矩形加单点查即可。

总共要做规模为 O(nlogn) 的二维数点,时间复杂度 O(nlog2n),点分治的大常数和数据结构的 log 是分开的,故常数很小。

posted @   寂静的海底  阅读(18)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起