• 分块—暴力即正义


      分块即优美的暴力,通过将数组分成小块降低复杂度。分块可以维护线段树不好维护或根本维护不了的信息。线段树维护的信息必须具有可合并性,单调性等,而分块对信息性质的要求并没有那么苛刻。但在思想上,分块又与线段树十分类似,通过标记等操作来降低复杂度。

    基本定义

        一个长度为N的序列,块的大小为block,从序列的第一个元素开始,每block个单位为一个块,若最后剩余的块不足block个,则自成一块。

        每个块的大小(block)为。(或许不是最优,但一般满足大部分的题目要求)

        块数(cnt)为 cnt=N/block+(N%block==0?:0:1)

        位置 i 属于第 (i-1)/block+1 块,

        第 i 块的范围为 

        整块:操作区间完全覆盖的块。

        边块:操作区间不完全覆盖的块。

    基本操作

       对于区间操作时存在两种情况。(L所在块为bl,R所在块为br)

         ① 区间在同一个块内(bl=br):暴力重构。

         ② 区间不在同一个块内(bl>br):

           左边块:,暴力重构。

           右边块:,暴力重构。

           中间整块:bl+1,bl+2 ,……,br-1,通过标记数组等进行操作。

    栗子

    以区间修改,单点求值为例。

    附:分块9题

    本博客仅为本人学习,总结,归纳,交流所用,若文章中存在错误或有不当之处,十分抱歉,劳烦指出,不胜感激!!!
  • 相关阅读:
    aop 切面编程
    动态代理模式
    idea 从接口方法 跳转到 实现类 对应的方法
    2019年的某一天
    javaweb . 页面登出 操作
    Could not find acceptable representation报错
    window下mysql character_set_server修改不生效问题
    git 命令推送
    spring boot 2.x + elasticsearch+mybatis-plus
    java8的Consumer函数式接口
  • 原文地址:https://www.cnblogs.com/VividBinGo/p/11307991.html
Copyright © 2020-2023  润新知