浅谈二维数点
浅谈二维数点
1. 序列上的二维数点
这个问题显然是简单的,离线后按照 \(x\) 排序后第一维扫描,第二位 \(BIT\) 的二维偏序
时间复杂度 \(O(n\log n)\),空间复杂度 \(O(n)\)
那么如果在线呢?😕
经典的主席树问题,以下标为版本,建可持久化线段树
时间复杂度 \(O(n\log n)\),空间复杂度 \(O(n\log n)\)
2.树上二维数点(子树的交)
对于两棵树,若我们想求出其上两个子树的节点交,其实将树拍扁成 \(dfs\) 序后,是和序列上的二维数点等价的
但对于某些题目,有些更为巧妙的做法
给定 \(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)\)

浙公网安备 33010602011771号