Re: [问题] 主席树?

楼主: FRAXIS (喔喔)   2015-02-07 23:47:17
我研究了一下,如果元素有 n 个,查询有 m 个,当 m 至少为 n^0.5,
莫队算法那空间复杂度应该会是 O((n+m) * n^0.5 * (状态转移cost) + 排序)
空间是 O(m+状态表示)。
所以我猜主要的优势是在好实作和省空间吧。
我尝试了几个题目(假设m = O(n))
1. Range inversion counting: 求区间内的逆序对
2. Range sum of distinct elements: 区间内相异元素之和
3. Range second frequency moment: 求区间内元素出现次数的平方和
4. Range mode query: 求区间内的众数
1 的 offline 查询为 O(n^0.5 lg n)
online 查询为 O(n^0.5) 空间 O(n^1.5)
或查询为 O(n^0.5 lg n) 空间 O(n)
2, 3, 4 的 offline 查询为 O(n^0.5)
4 的 online 查询为 O(n^0.5) 空间 O(n)
2, 3 的 online 查询为 O(n^0.5) 空间 O(n^1.5)
或查询为 O(n^0.5 lg n) 空间 O(n)
不知道能不能做成 查询为 O(n^0.5) 空间 O(n)
至于动态的话,就把 block 大小调小一点就可以了。
好像还有看到题目是 range distinct elements,找区间相异数字的个数,
这应该是O(lg n)可解的。
还有一些相关的问题,像是区间 majority,区间 minority,
区间前 k 大 (sorted/unsorted),或是区间出现最多次的 k 个元素。
楼主: FRAXIS (喔喔)   2015-03-10 20:23:00
我发现类似的技巧曾经出现在 http://ppt.cc/5u1T用来计算 离线的区间 k 大查询

Links booklink

Contact Us: admin [ a t ] ucptt.com