2019暑期金华集训 Day7 分治
自闭集训 Day7
分治
主定理
由于我沉迷调题,这个地方没听课。
某些不等式
咕了
nth_element
使用快速排序的思想,选一个中间点,看左右有多少个。
期望复杂度\(O(n)\)。
首先把一个序列分成5份,每份大小\(n/5\),叠成一个矩阵,对每一列进行排序。
现在中间一行就是每一列的中位数,递归下去求它的中位数。
然后把中位数比他小的列放左边,比他大的放右边。
于是我们知道至少\(0.3n\)比他小/比他大,也就是至多\(0.7n\)比他小/比他大。
于是我们找到了一个比较好的轴点,用上面的方法分治下去。
然后就\(T(n)=T(0.2n)+T(0.7n)+O(n)=O(n)\)。
但这个算法常数巨大……
CF958E3
首先有结论:任意\(2n\)个点都存在合法方案。
为什么?考虑某个不合法方案的交叉,可以把边扭一下,于是总长度会变小。又因为总长度不可能无限减小,于是就有了。
然后怎么求答案呢?
咕了
CF429D
明眼人一眼就看出这是个距离的形式,然后就变成平面最近点对了……
我可能就是瞎……
CF938G
裸线段树分治+并查集+线性基。
某题
点数减边数裸题。
显然对于一个点集,满足条件的点\(u\)构成一个连通快(即一棵树),又因为树的点数减边数为1,所以直接统计即可。
CF1010F
怎么就讲过了啊/kk
令\(b_i=w_i-\sum_v w_v\),于是条件等价于\(b_i\ge 0\)。
对于一个合法连通块,\(\sum b_i=X\)。
于是就可以开始对\(b_i\)计数了。
于是只要定下了连通块大小为\(m\),方案数就是\({X+m-1\choose m-1}\)。
于是就转化为原来的一道题了,就做完了。
某题
支持动态加有向边、查询相互可达的\((u,v)\)个数。
我们发现动态维护强连通分量似乎非常不可做,所以可以对于每一条边\((u,v)\),判断\(u,v\)什么时候会在同一个强连通分量里面。
显然这个东西满足单调性,但数据范围不允许我们挨个二分,所以我们使用整体二分。
定义函数\(solve(l,r,ql,qr)\)表示已知\([ql,qr]\)里面的边的时间都在\([l,r]\)里面,现在要求出每条边的时间。
二分一个\(mid=(l+r)/2\),然后把\([1,mid]\)里面的边都加进图里跑tarjan,这是最暴力的方法,显然过不了。但是我们注意到只要在递归\([l,mid]\)之后不把边清空,就可以只加\([l,mid]\)的边,然后用并查集缩一下点,复杂度就对了。
某题
做过,但咕了!
考虑把起点从上到下走,维护最短路树,那么可以感受到树上的父亲一定是从上变成左,再变成下,最多变两次。
然后如果一条边在\([l,r]\)没有变,那么可以缩起来。
于是就整体二分然后???
离线求逆元
求一个前缀积,然后大家都会。
树上并查集
树上分块+四毛子。
(四毛子似乎是一个叫做四个俄罗斯人的算法?)
然后就做到线性了??
咕了
Trajan LCA
离线lca,用树上并查集可以优化至\(O(n)\)?
2019暑期金华集训 Day7 分治的更多相关文章
- 2019暑期金华集训 Day7 动态规划
自闭集训 Day7 动态规划 LOJ6395 首先发现这个树的形态没啥用,只需要保证度数之和是\(2n-2\)且度数大于0即可. 然后设\(dp_{i,j}\)表示前\(i\)个点用了\(j\)个度数 ...
- 2019暑期金华集训 Day6 杂题选讲
自闭集训 Day6 杂题选讲 CF round 469 E 发现一个数不可能取两次,因为1,1不如1,2. 发现不可能选一个数的正负,因为1,-1不如1,-2. hihoCoder挑战赛29 D 设\ ...
- 2019暑期金华集训 Day6 计算几何
自闭集训 Day6 计算几何 内积 内积不等式: \[ (A,B)^2\le (A,A)(B,B) \] 其中\((A,B)\)表示\(A\cdot B\). (好像是废话?) 叉积 \[ A\tim ...
- 2019暑期金华集训 Day5 树上数据结构
自闭集训 Day5 树上数据结构 前置知识 点分治 边分治 树链剖分 LCT Top Tree LCT时间复杂度 线段树每次查询是严格\(\log n\)的,然而splay维护连续段的时候,如果每次查 ...
- 2019暑期金华集训 Day5 生成函数
自闭集训 Day5 生成函数 一般生成函数 无脑地把序列变成多项式: \[ \{a_i\}\rightarrow A(x)=\sum_{n} a_nx^n \] 形式幂级数 生成函数是一种形式幂级数. ...
- 2019暑期金华集训 Day3 字符串
自闭集训 Day3 字符串 SAM 考虑后缀树. SAM的parent树是反串的后缀树,所以后面加一个字符的时候相当于往串前面加一个字符,恰好多出了一个后缀. 于是可以以此来理解SAM. 每一条路径对 ...
- 2019暑期金华集训 Day1 组合计数
自闭集训 Day1 组合计数 T1 \(n\le 10\):直接暴力枚举. \(n\le 32\):meet in the middle,如果左边选了\(x\),右边选了\(y\)(且\(x+y\le ...
- 2019暑期金华集训 Day1 数据结构
自闭集训 Day1 数据结构 CF643G 用类似于下面的方法,搬到线段树上. 如何合并两个集合?先全部放在一起,每次删掉最小的\(cnt_i\),然后把其他所有的\(cnt\)都减去\(cnt_i\ ...
- 2019暑期金华集训 Day3 图论
自闭集训 Day3 图论 NOI2019 D2T1 没有真正建出图来的必要,可以直接打取\(\min\)的\(tag\). 也可以把边压进堆里,然后变成一个二维清点问题(???),然后就线段树+并查集 ...
随机推荐
- 逆波兰表达式求值 java实现代码
根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总是有效的.换句话说 ...
- 易百教程人工智能python修正-人工智能监督学习(分类)
分类技术或模型试图从观测值中得出一些结论. 在分类问题中,我们有分类输出,如“黑色”或“白色”或“教学”和“非教学”. 在构建分类模型时,需要有包含数据点和相应标签的训练数据集. 例如,如果想检查图像 ...
- MQ相关
1. 如何保证消息按顺序执行 2. 如何保证消息不重复消费 3. 如何保证消息不丢失 4.RabbitMQ Java Client简单生产者.消费者代码示例
- 混编用到 C++中数组和vector 复习下大学课本
本文基于邓俊辉编著<数据结构(C++语言版)(第3版)>.<C++ Primer(第5版)>以及网上的相关博文而写,博主水平有限,若有不妥处,欢迎指出. 一.数组 C++中数组 ...
- RAS非对称加密
加解密密钥不一致,一般私钥不公开,使用公钥加密,私钥解密,使用私钥加密,公钥可以解密. java代码 import javax.crypto.Cipher; import java.security. ...
- H5调起IOS原生商店支付
参考文档:http://www.html5plus.org/doc/zh_cn/payment.html 申请内购项目摘自 https://www.jianshu.com/p/1e79bfbe46e2 ...
- JavaScript之获取标签
(1)html <p id="txt">这是P标签</p> <h1 id="txt" style="color: red ...
- 纯JavaScript实现的调用设备摄像头并拍照的功能
这篇文章本来不在Jerry计划内的,咱们SAP中国研究院今天已经正式上班了,Jerry也回到工作岗位开始搬砖了. 今天一位同事问我关于本文标题描述的功能如何实现,Jerry在网上随便搜了一下,类似的例 ...
- jenkens docker启动
docker run \ -u root \ --rm \ -d \ -p 8080:8080 \ -p 50000:50000 \ -v jenkins-data:/var/jenkins_home ...
- Python——Int&Bool
整数类型: int类型,多用于数字运算 print(666) print(6+1) 整数类型转换: v1 = 666 v2 = str(v1) #会得出字符串的666 v1 = True v2 = i ...