整体二分
前置芝士
整体二分就是二分的进阶版
类似于cdq分治(毕竟都是分治嘛)
算法流程
对于一些问题,我们回答一个询问的时候,我们可以先O(n)预处理,然后二分回答。
但是如果有m个询问呢?我们不能对每个询问都做一遍预处理。
此时我们需要发扬一下懒人思想:预处理中的某些处理是否可以多次利用(也就是处理一次, 但对多个询问的二分有用)?
这时候就需要把所有的询问一起二分(so call 整体二分),才有可能实现上边的懒人思想。
以P3527 [POI2011]MET-Meteors为例学习整体二分,建议配合代码食用
学习题解点这里
上边这个只建议学思路,不建议学写法
带修改区间第k小数
带修改区间第k小数的一个神奇思路:整体二分
有树套树我不用就用整体二分,就是玩~
还是二分答案,比mid小的看做1,大的看做0,用树状数组维护
时间这一维直接顺着来就行了,判断一个询问往左还是右分:判询问区间(就是输入的那个,不是答案(二分)区间)中小于mid的数(即"1")的个数,和k比较一下就行
可以看看chen_zhe的题解
说实话,我挺推荐他这种写整体二分的写法的
总结
在此借花献佛,看一下《浅谈数据结构题的几个非经典解法》(许昊然)中的介绍
所谓整体二分,需要数据结构题满足以下性质:
1. 询问的答案具有可二分性
-
修改对判定答案的贡献相对独立,修改之间互不影响效果
-
修改如果对判定答案有贡献,则贡献为一确定的与判定标准无关的值
-
贡献满足交换律,结合律,具有可加性
5. 题目允许离线操作
练习题目
P1527 [国家集训队]矩阵乘法 裸题,多了一维而已,连修改都不用
P3332 [ZJOI2013]K大数查询 练整体二分的一道比较基础的题目
P7424 [THUPC2017] 天天爱射击 和P3527 [POI2011]MET-Meteors不能说毫不相干,只能说一模一样
原文地址:https://www.cnblogs.com/wljss/p/14972286.html
- [WCF权限控制]基于Windows用户组的授权方式[下篇]
- Spring读书笔记——bean解析
- 10个大数据误区,看看你中了几个?
- 从数据到代码——通过代码生成机制实现强类型编程[上篇]
- Spring读书笔记——bean加载
- Java8-初识Lambda
- 我的WCF之旅(5):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的重载(Overloading)
- WCF技术剖析之三十:一个很有用的WCF调用编程技巧[下篇]
- 谈谈WCF中的Data Contract(3):WCF Data Contract对Collection & Dictionary的支持
- WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载]
- 我的WCF之旅(4):WCF中的序列化[下篇]
- [WCF权限控制]模拟(Impersonation)与委托(Delegation)[上篇]
- Android EclipseIDE技巧
- 什么是编译错误,运行时错误及逻辑错误?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JavaScript编码规范
- HTML编码规范
- postgres数据库不能用ip地址访问的问题
- Flutter基础widgets教程-ButtonBar篇
- 如何在linux服务上创建samba文件共享服务
- Salesforce Javascript(二) 箭头函数
- java面试基础部分;
- 7-2.表单-HTML基础
- 如何在github上传多个项目
- Flutter基础widgets教程-Card篇
- Springboot热部署,使用spring-boot-devtools、springloaded两种方式进行热部署
- SpringBoot中jsp里面的静态资源js、css、images访问不到解决办法
- spring boot jsp里面的静态资源访问不到解决办法
- Flutter基础widgets教程-Center篇
- 如何上传项目到GitHub