前言

  这是一波强行总结。

  下面是一波瞎比比。

  这几天做了几道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. 详谈Javascript类与继承

    本文将从以下几方面介绍类与继承 类的声明与实例化 如何实现继承 继承的几种方式 类的声明与实例化 类的声明一般有两种方式 //类的声明 var Animal = function () { this. ...

  2. 简单说下 Winform 的分页快速开发框架必须要实现的几个功能之一

    简单说下 Winform 的分页快速开发框架必须要实现的几个功能之一 分页非为前端分页  和 后端分页,前端分页只有适用于B/S,B/S的呈现速度远远不如C/S,而C/S则没有这个问题,所以分页必然是 ...

  3. webpack 1.x 学习总结

    webpack介绍(from github): A bundler for javascript and friends. Packs many modules into a few bundled ...

  4. 关于mysql插入数据异常

    今天创建数据库时,在插入数据时出现了几个问题.(首次在LInux环境下创建数据库) 一个是关于SQL Error [1146] [42S02]: Table 'struts2exec.s_user' ...

  5. 利用python对excel进行数据剔除

    需求分析: 判断excel2表中的某个唯一字段是否满足条件,如果满足条件,就在excel1中进行查询,若存在excel中,就将该数据进行剔除. python脚本的实现: from __future__ ...

  6. mssql执行计划查看的一些知识

    在MSSQL中,查看较慢语句的执行计划,就是一个比较直观的方式, 如果查看执行计划呢: 1.从右到左,从上到下的顺序阅读执行计划2.执行计划中每个图标代表一个运算符,总开销为100%3.数据从右向左在 ...

  7. WCF、WebAPI、WCFREST、WebService之间的区别和选择

    转载翻译,原文:http://www.dotnet-tricks.com/Tutorial/webapi/JI2X050413-Difference-between-WCF-and-Web-API-a ...

  8. Spring Data 整合 ElasticSearch搜索服务器

    一.基于 maven 导入坐标(pom.xml文件) <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi ...

  9. poj 3070 && nyoj 148 矩阵快速幂

    poj 3070 && nyoj 148 矩阵快速幂 题目链接 poj: http://poj.org/problem?id=3070 nyoj: http://acm.nyist.n ...

  10. mysql 索引类型

    根据类型分为普通索引2种类型,hash 和b-tree   最常用    hash是按一对一索引的.速度 最快但不支持范围 比如where name = 'dd' 最快.但是使用 date >3 ...