前言

  这是一波强行总结。

  下面是一波瞎比比。

  这几天做了几道CDQ/整体二分,感觉自己做题速度好慢啊。

  很多很显然的东西都看不出来 分治分不出来 打不出来 调不对

  上午下午晚上的效率完全不一样啊。

  完蛋.jpg 绝望.jpg。

关于CDQ分治

  CDQ分治,求的是三维偏序问题都知道的。

  求法呢,就是在分治外面先把一维变成有序

  然后分治下去,左边(l,mid)关于右边(mid+1,r)就不存在某一维的逆序了,所以只有两维偏序了。

  这个时候来一波"树状数组求逆序对"的操作搞一下二维偏序

  就可以把跨过中线的,左边更新右边的情况计算出来。

  注意:只计算左边的操作对右边的询问的贡献!

  然后左右两边递归处理就好了。

  正确性:按照线段树的形态递归的CDQ分治,保证每一对三元组在线段树上都有且仅有一个LCA(这不废话吗),而这一组答案就会且仅会在LCA处计算。如果在LCA下面,点对不在一个work内自然不会计算。如果在LCA上面了,点对就在同一侧,不会互相更新。

  复杂度:设一次work的复杂度是f(len),则复杂度是O(f(n)logn)。

  一般都在分治里用树状数组,一般的复杂度就是O(nlog2n)的。

  一般是这样的套路:假设三维偏序分别为a,b,c;

  在main函数里保证a递增。

  然后在CDQ里先分治左右,传下去的时候a仍然递增,不破坏性质。

  然后分治完左右两边后,需保证左右两边分别b都是递增的(a不重要)。

  然后就是类似归并排序的操作了。

  此时左边的a肯定都小于右边的a,那么如果对于一个右边的元素

  之前类似归并的操作就可以保证所有小于b的左边的元素都已经遍历过。

  那么找c也小于它的?值域线段树/树状数组等数据结构维护一下就好了。

  然后你这么归并了一波后,就发现统计完答案后b是有序递增的了(这个时候a已经不重要了)。

  对于上层操作,符合"左右两边分别b是递增的"了。

  BZOJ陌上花开竟然是权限题?这是在搞笑。

  好吧BZOJ动态逆序对,之前写过的,做两次CDQ就好了。

  BZOJ稻草人,也是CDQ。

  

关于整体二分

  整体二分主要是把所有询问放在一起二分答案,然后把操作也一起分治。

  什么时候用呢?

  当你发现多组询问可以离线的时候

  当你发现询问可以二分答案而且check复杂度对于单组询问可以接受的时候

  当你发现询问的操作都是一样的的时候

  你就可以使用整体二分这个东西了。

  具体做法讲起来有些玄学。

  想想:二分答案的时候,对于一个答案,是不是有些操作是没用的,有些操作贡献是不变的?

  比如二分一个时间,那么时间后面发生的操作就是没有用的,时间前面的贡献是不变的。

  二分一个最大值,比mid大的都是没用的,比mid小的个数是一定的。

  整体二分就是利用了这么一个性质。

  二分答案,然后把没有用的操作扫进右边,和答案在[mid+1,r]的询问一起递归处理。

  把有用的操作放进左边,减去不变的贡献,和答案在[l,mid]的一起递归处理。

  注意答案在[mid+1,r]的询问要算上放进了左边的操作的贡献,开个变量记下来/直接减掉都可以。

  注意整体二分在solve内的复杂度一定只能与区间长度线性相关,不能每次都有别的复杂度!

  比如一次solve的复杂度是O(lenlogn)就可以,O(len+sqrt(n))就不行。

  大概就是这么一个东西。

  复杂度?和CDQ是一样的,都是O(f(len)logn)。

  例题?BZOJ3110 K大数查询 Codevs Meteors。

  一样的套路了。

关于一些要注意的地方

  归并一定要把剩下的搞完!每次我都忘记这码子事!

  树状数组不能暴力清零!记个time或者依葫芦画瓢减回去都可以,一定不能清零!

  不要在CDQ里面套sort,太慢辣!(一定进不了第一版的!)

CDQ分治与整体二分小结的更多相关文章

  1. [学习笔记]CDQ分治和整体二分

    序言 \(CDQ\) 分治和整体二分都是基于分治的思想,把复杂的问题拆分成许多可以简单求的解子问题.但是这两种算法必须离线处理,不能解决一些强制在线的题目.不过如果题目允许离线的话,这两种算法能把在线 ...

  2. CDQ分治与整体二分学习笔记

     CDQ分治部分 CDQ分治是用分治的方法解决一系列类似偏序问题的分治方法,一般可以用KD-tree.树套树或权值线段树代替. 三维偏序,是一种类似LIS的东西,但是LIS的关键字只有两个,数组下标和 ...

  3. 技巧专题3(cdq分治、整体二分等)

    cdq分治与整体二分 cdq来源于2008年国家集训队作业陈丹琦(雅礼巨佬),用一个log的代价完成从静态到动态(很多时候是减少时间那一维的). 对于一个时间段[L, R],我们取mid = (L + ...

  4. Codeforces 1039D You Are Given a Tree [根号分治,整体二分,贪心]

    洛谷 Codeforces 根号分治真是妙啊. 思路 考虑对于单独的一个\(k\)如何计算答案. 与"赛道修建"非常相似,但那题要求边,这题要求点,所以更加简单. 在每一个点贪心地 ...

  5. 【BZOJ4237】稻草人 cdq分治+单调栈+二分

    [BZOJ4237]稻草人 Description JOI村有一片荒地,上面竖着N个稻草人,村民们每年多次在稻草人们的周围举行祭典. 有一次,JOI村的村长听到了稻草人们的启示,计划在荒地中开垦一片田 ...

  6. Loj#2880-「JOISC 2014 Day3」稻草人【CDQ分治,单调栈,二分】

    正题 题目链接:https://loj.ac/problem/2880 题目大意 给出平面上的\(n\)个点,然后求有多少个矩形满足 左下角和右上角各有一个点 矩形之间没有其他点 \(1\leq n\ ...

  7. [CF1386C] Joker (IOI 赛制,分治,整体二分+可回退并查集)

    题面 给一个 N N N 点 M M M 边的简单无向图,询问 Q Q Q 次,每次问你把编号在 [ l i , r i ] [l_i,r_i] [li​,ri​] 之间的边删掉后,该图是否存在奇数环 ...

  8. 【BZOJ 4025】 (CDQ?还是整体二分?+并查集及它的恢复操作)

    4025: 二分图 Description 神犇有一个n个节点的图.因为神犇是神犇,所以在T时间内一些边会出现后消失.神犇要求出每一时间段内这个图是否是二分图.这么简单的问题神犇当然会做了,于是他想考 ...

  9. 一篇自己都看不懂的CDQ分治&整体二分学习笔记

    作为一个永不咕咕咕的博主,我来更笔记辣qaq CDQ分治 CDQ分治的思想还是比较简单的.它的基本流程是: \(1.\)将所有修改操作和查询操作按照时间顺序并在一起,形成一段序列.显然,会影响查询操作 ...

随机推荐

  1. Activity切换动画---点击哪里从哪放大

    emmmm,这次来梳理一下 Activity 切换动画的研究.首先,老规矩,看一下效果图: 效果图 这次要实现的动画效果就是类似于上图那样,点击某个 view,就从那个 view 展开下个 Activ ...

  2. HTML基础上

    知识点一:HTML Hyper Text Markup Language 超文本标记语言. HTML标准结构: < ! doctype html> 声明文档类型 <html> ...

  3. iOS11UINavigationBar的item左右间距调整

    相信很多同学都知道在iOS7之后调整导航栏两侧按钮距离左右间距,其实就是在左右barButtonItem的数组中添加一个宽度为负的占位item. - (void)addLeftBarButtonIte ...

  4. mysql单表多表查询

    单表查询语法: select 字段1,字段2... from 表名where 条 件group by fieldhaving 筛选order by 字段limit 限制条数 关键字的优先级:from  ...

  5. HDU1075-What Are You Talking About

    What Are You Talking About Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 102400/204800 K ...

  6. SQL Server学习之路(二):主键和外键

    0.目录 1.定义 1.1 什么是主键和外键 1.2 主键和外键的作用 1.3 主键.外键和索引的区别 2.主键(primary key) 2.1 通过SSMS设置主键 2.2 通过SQL语句设置主键 ...

  7. 2、C#基础 - Visual Studio 的版本选择和下载

    有句话说:工欲善其事,必先利其器,我不推荐在学习一个语言时使用记事本练习,甚至说相当的排斥.当然了,你也可以选择你自己喜欢的方式.本系列推荐使用的IDE为vs2017 community版,银子不够的 ...

  8. dom4j详解

    Dom4j下载及使用Dom4j读写XML简介要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在 http://www.dom4j.org/目前最新dom4j包下载地址:htt ...

  9. maven的安装配置以及在IDEA中配置

    一.下载maven: 1.maven官网:http://maven.apache.org/download.cgi 二.安装配置 1.下载后解压到本地目录,如图 2.配置环境变量:我的电脑右键-> ...

  10. Java开发小技巧(三):Maven多工程依赖项目

    前言 本篇文章基于Java开发小技巧(二):自定义Maven依赖中创建的父工程project-monitor实现,运用我们自定义的依赖包进行多工程依赖项目的开发. 下面以多可执行Jar包项目的开发为例 ...