zoukankan      html  css  js  c++  java
  • 线段树BIT操作总结

    1. 求区间最大子段和:

    -6 3 5 -1 2 -2,这个数组最大子段和是3 5 -1 2。

    操作类型:1e5次查询区间最大子段和。

    方法:

    每段区间维护4个值,区间最大子段和,左端点为l的区间最大子段和,右端点为r的区间最大子段和, 区间sum和。

    pushup:

    A. 区间最大和 = max {

    1. ndr.左端点为l的区间最大子段和 + ndl.右端点为r的区间最大子段和

    2. ndl.区间最大子段和

    3. ndr.区间最大子段和}

    B.左端点为l的区间最大子段和 = max{

    1. ndl.左端点为l的区间最大子段和.

    2. ndl.区间sum和 + ndr.左端点为l的区间最大子段和}

    C. 右端点为r的区间最大子段和  = max{

    1. ndr.右端点为r的区间最大子段和.

    2. ndr.区间sum和 + ndl.右端点为r的区间最大子段和}

    2. 区间开根号

    维护2个值,区间mi和区间ma。

    操作:ma - ma^(1/2) == mi - mi ^ (1/2)时转换为区间减法

    3. 偏序问题(用BIT更方便)

    排序后跑

    4. 线段树二分

    n个胶水每个胶水内涵胶水量为v,一次只能带一个去粘东西,第i次花费ai胶水,因为每个胶水会过期,每次尽可能用最早开的胶水。

    维护区间ma值,优先选择左儿子。

    5.求树上子树的sum和, ma等等

    dfs序处理出来,跑线段树

  • 相关阅读:
    linux 常用快捷键
    命令行远程链接
    mybatis参数错误 Parameter '×××' not found. Available parameters are [0, 1, param1, param2]
    mybatis延迟加载
    mybatis跨XML引用
    eclipse修改项目名称
    wait, WIFEXITED, WEXITSTATUS
    进程通信中如何进行值得传递?
    fork新建进程
    Ubuntu安装genymotion模拟器步骤
  • 原文地址:https://www.cnblogs.com/AlexPanda/p/12537068.html
Copyright © 2011-2022 走看看