zoukankan      html  css  js  c++  java
  • 两种线段树问题

    这几天做了一些线段树,发现线段树问题还是主要分为两大类的。

    第一类是普通的区间信息维护,查询

    大多数问题属于这类,我们平时学习线段树的例题也都以这类为主。

    当然,具体还包含像成段更新,打标记等等很多种,但是这类线段树都是遇到完整区间就返回值,利用左右两个子区间的信息维护父亲区间的信息。

    这种题目很多,也很常见。

    而另外一类我个人接触的比较少。这种线段树问题不用左右两个儿子维护父亲,也不用整段区间返回。相反,这类问题是利用线段树维护的信息进行二分查找。对于一个大区间,选择左儿子或者右儿子只在这一个儿子内查找。(大概就是所谓的线段树自顶向下的类型)

    举一些例题:

    POJ 2828 这个题需要查询一段区间内的第i个空是谁。我们维护一个区间内有多少个空,如果一个大区间的左儿子的空数<=i ,就在左儿子种查询,反之就在右儿子种查询。

    HDU2795 这个题需要查询一段区间内第一个大于等于x的数是谁。我们维护一段区间的最大值。如果最大值小于x,就返回没有,否则看左右儿子的最大值,选择其中一个递归向下查找。

    其他例子待补充。。。

    查询一段区间内第一个大于等于x的数是谁这种操作比较典型,很多操作都可以归结为此类,对于这种问题,在线段树上二分查找是很高效又好写的方法。

  • 相关阅读:
    日志模块
    DDT数据驱动
    unittest测试框架
    vim编辑器
    文件夹的管理
    文件内容查看(如查看日志)
    文件的移动和拷贝
    文件的增删改查
    linux基本命令
    测试5--模拟一个在控制台不断按时分秒打印的电子表
  • 原文地址:https://www.cnblogs.com/loveidea/p/3900138.html
Copyright © 2011-2022 走看看