区间树

给定一组区间,对于任意点 ,筛选出所有包含它的区间。

所有区间的交非空: 取它们的一个公共点 ,做预处理,按照由远及近的顺序分别将各个区间的左右端点进行排序。 此后对于任意查询 ,不妨设 ,只需由远及近地遍历右端点并判断是否大于 即可,时间复杂度为 输出敏感

采用分治的思想,将区间按照所有端点中位数 和区间左右端点的关系分为三类。对于 ,按前法可以解决。对于 ,分别交给左右子树,左右子树继续递归地划分。

深度? 树占用空间? 对于每个树上的节点,用两个列表保存节点内的区间的有序左端点和有序右端点。 则每个区间存了两遍,总空间复杂度为

如何构造?

  • 先对所有端点排序
  • 取中点
  • 遍历区间列表,将区间分为三类
  • 对于当前节点应该存储的区间,分别将有序的左右端点存入列表
  • 递归构造左右子树
  • 时间复杂度为 查询:对于每个节点,先报告自身查询结果,然后根据 的大小关系对子树进行查询,总时间复杂度为