Loading

浅谈二维数点

浅谈二维数点

1. 序列上的二维数点

这个问题显然是简单的,离线后按照 \(x\) 排序后第一维扫描,第二位 \(BIT\) 的二维偏序

时间复杂度 \(O(n\log n)\),空间复杂度 \(O(n)\)

那么如果在线呢?😕

经典的主席树问题,以下标为版本,建可持久化线段树

时间复杂度 \(O(n\log n)\),空间复杂度 \(O(n\log n)\)

2.树上二维数点(子树的交)

对于两棵树,若我们想求出其上两个子树的节点交,其实将树拍扁成 \(dfs\) 序后,是和序列上的二维数点等价的

但对于某些题目,有些更为巧妙的做法

P9196 [JOI Open 2016] 销售基因链

给定 \(n\) 个字符串,\(m\) 次询问,每次求同时以 \(S\) 为前缀,\(T\) 为后缀的字符串有多少

\(n,m,\sum{|s_i|},\sum{|S|},\sum{|T|} \le 2\times 10^6\)

做法:建出正反两个 Trie,求其询问串对应的两个子树的交

离线。将 \(s_i\) 升序排序,把每个询问的 \(S\) ,用正 Trie 映射到 \([1,n]\) 上的一个区间,再按降序排序,做扫描线即可。这种做法无需 \(BIT\)

3.带修二维数点

首先在线可以树套树(带修主席树)时间 \(O(n\log^2 n)\)

离线可以 CDQ 分治,增加时间维度,变成三维偏序 \(O(n\log^2n)\)

posted @ 2024-11-04 16:44  慕斯ひいきする  阅读(165)  评论(0)    收藏  举报