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

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

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

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

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

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

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

    举一些例题:

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

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

    其他例子待补充。。。

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

  • 相关阅读:
    JAVA maven 仓库 基础命令
    JAVA maven 环境变量配置
    JAVA jdk 环境变量配置
    kafka 环境搭建
    java servlet 基础
    java idea 配置tomcat
    java tomcat服务器
    java io流
    java 字符流
    【火炉炼AI】深度学习005-简单几行Keras代码解决二分类问题
  • 原文地址:https://www.cnblogs.com/loveidea/p/3900138.html
Copyright © 2011-2022 走看看