zoukankan      html  css  js  c++  java
  • 时间分治和整体二分总结

    时间分治(又叫cdq分治),是解决一类“贡献独立”、“支持离线”的数据结构问题的算法。

    假设有一个操作序列:ABAABAABBAAAB,其中每个A对其后面的B有一定贡献,要求输出每个B对应的答案。

    “贡献独立”是指:每个A对其后面的B的影响是不受其他A影响的,即是要我们用B前面的所有A更新过B,那么B的答案就是正确的。

    贡献独立的例子:max,min,sum,count(极值,和,满足某种条件的A的个数)。

    “支持离线”是指每个AB必须开始时就给出,有些问题(如维护凸壳优化DP),可能A和B是合在一起的,即受前面的东西影响,得到答案后再影响后面的东西,这个东西也可以做(虽然一开始它没有告诉我们每个对后面的影响是什么)。

    这样我们就可以将上面的问题变为:AAAABBBB的问题,这样我们就可以根据前面所有的A预处理出一些信息,然后去更新后面的B(主要)。

    整体二分:解决一些询问具有二分性的问题,但如果单个询问都去二分,那么为了一个询问有可能就需要进行一次预处理,时间不允许。

    整体二分就是共用一些预处理,然后同时二分所有询问,难点就在于共用什么信息以及怎么实现。

  • 相关阅读:
    C# 高效字符串连接 StringBuilder介绍
    C#图解教程
    C#中string类型是值类型还是引用类型?
    UML类图10分钟快速入门
    C#设计模式--单例模式
    计算机是如何启动的?
    2018年计划
    转:SQL进阶之变量、事务、存储过程与触发器
    2020/02/06,武汉
    2020/02/06,渐渐,from eason for you for her
  • 原文地址:https://www.cnblogs.com/idy002/p/4465428.html
Copyright © 2011-2022 走看看