• 线段树进阶之清风拂面


    ——————————————————————————山前停马蹄,绿风揉春水,林间耸翠如眼,崖前无尽深渊。行到星子入夜,风声轻拂,恣意大观。

    一个问题,只要能转化成对一些连续点的修改和统计问题,基本就可以用线段树来解决了。

    线段树的原理,就是,将[1,n]分解成若干特定的子区间(数量不超过4*n),然后,将每个区间[L,R]都分解为少量特定的子区间,通过对这些少量子区间的修改或者统计,来实现快速对[L,R]的修改或者统计
    eg;
    假设有编号从1到n的n个点,每个点都存了一些信息,用[L,R]表示下标从L到R的这些点。
    线段树的用处就是,对编号连续的一些点进行修改或者统计操作,修改和统计的复杂度都是O(log2(n)).
    由此看出,用线段树统计的东西,必须符合区间加法,否则,不可能通过分成的子区间来得到[L,R]的统计结果。

    符合区间加法的例子:
    数字之和——总数字之和 = 左区间数字之和 + 右区间数字之和
    最大公因数(GCD)——总GCD = gcd( 左区间GCD , 右区间GCD );
    最大值——总最大值=max(左区间最大值,右区间最大值)
    不符合区间加法的例子:
    众数——只知道左右区间的众数,没法求总区间的众数
    01序列的最长连续零——只知道左右区间的最长连续零,没法知道总的最长连续零

    --------------------------Thanks 岩之痕 in CSDN

  • 相关阅读:
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    12.20++对王建民老师的评价+个人期末总结
    12.19
    12.18
    12.17
    12.16
  • 原文地址:https://www.cnblogs.com/dragondragon/p/11242586.html
Copyright © 2020-2023  润新知