3.4-3.5日记
信息竞赛:
总结:主要学了分块和莫队的常见用法,学了相关的根号重构和根号分治
[POI 2015] ODW 难度:省选/NOI-
根号分治的典题,我们把询问按照一步的大小分成两类。
当 \(c\geq \sqrt{n}\) 时,我们直接暴力在树上跳,最多只用跳 \(\sqrt{n}\) 次。
剩下的情况,我们预处理出来每个点一次跳 \(c\) 步跳到根节点的路径权值和,然后做树上差分就行了
这样我们暴力和预处理的复杂度就都匀到 \(O(n\sqrt{n})\) 了(暴力跳可以用长链剖分优化到 \(O(1)\),也可以 \(O(logn)\)倍增)
上帝造题的七分钟 2 难度:提高+/省选-
我们注意到值域很小,只有 \(10^{12}\),敲一下计算器就会发现只要开 \(6\) 次方就会开到 \(1\),接下来多次开方也一直是 \(1\)。
因此,我们可以直接对每个位置暴力修改,用线段树维护区间和,当发现一个区间全是 \(1\) 时就不在往下修改,这样,我们每个数最多被修改 \(6\) 次,单次修改复杂度 \(O(logn)\)。
[APIO2015] 雅加达的摩天楼 难度:省选/NOI-
这道题和根号算法并没有什么关系,但我们可以用根号分治的方式证明复杂度
我们直接暴力搜索,设定状态 \((i,j)\) 表示当前在第 \(i\) 栋楼上一步可以调 \(j\) 步,那么,我们按照 \(j\) 的大小分类讨论
当 \(j\geq \sqrt{n}\) 时,至多有 \(m\sqrt{n}\) 种情况,因为最多有 \(m\) 只doge,每只doge只能到达 \(\sqrt{n}\) 栋楼
当 \(j<\sqrt{n}\) 时,至多有 \(n\sqrt{n}\) 种情况
所以最终我们总的方案数只有 \((n+m)\sqrt{n}\) 个,直接bfs就行
[AHOI2013] 作业 难度:省选/NOI-
相当于莫队板子题
我们开两个数组,第一个数组 \(cnt_{1,i}\) 记录每个值 \(i\) 出现过多少次,第二个数组 \(cnt_{2,i}\) 记录每个值 \(i\) 是否出现过
那我们的查询其实就相当于求个区间和,用树状数组围护,更新答案的部分用莫队维护即可
[HEOI2016/TJOI2016] 排序 难度:省选/NOI-
很有意思的一道题,我们发现每次对一个区间排序时间复杂度是 \(O(nlogn)\) 的,我们无法接受
但是,我们只对一个01序列排序的话,我们只用统计一下区间内1的出现次数,然后区间赋值即可,可以用线段树 \(O(nlogn)\) 维护
我们可以试着将原序列转为01序列,二分一个最终答案 \(ans\),对于所有 \(a_i \geq ans\) 赋值为1,剩下的赋值0,我们维护01序列,只要最后位置 \(q\) 值为1,我们这个答案就是合法的
[Ynoi Easy Round 2015] 盼君勿忘 难度:省选/NOI-
蒟蒻第一次挑战Ynoi
因为我们求的是去重后的子序列的和,所以我们可以考虑拆贡献
假设 \(x\) 在 \([l,r]\) 中出现了 \(k\) 次,那么就会有 \(2^{len-k}(len=r-l+1)\) 个区间不包含 \(x\),剩下的 \(2^k-2^{len-k}\) 个区间,\(x\) 都会产生贡献,我们统计答案就变成了统计区间内每个数出现的次数,可以用莫队维护。
现在问题转化成了我们知道每个数出现的次数,怎么统计答案。
考虑根号分治的思想,我们把值分成两种,总的出现次数大于 \(/sqrt{n}\) 和小于。
对于总的出现次数大于 \(\sqrt{n}\) 的数,我们直接用 \(cnt_i\) 暴力计算答案,总复杂度为 \(O(\sqrt{n})\) 的
对于总的出现次数不大于 \(\sqrt{n}\) 的数,我们可以用一个桶 \(t_i\) 统计出现次数为i的数的权值和,然后 \(O(\sqrt{n})\) 的遍历桶即可
现在还有一个恶心的取模问题,我们的复杂度不允许我们加一个logn去快速幂,需要一个科技光速幂
对于每个询问,预处理在模 \(p\) 意义下的2的 $1,2,3...\sqrt{n} $次幂和 \(2*\sqrt{n},3*\sqrt{n}...n\) 次幂,然后求的时候直接 \(O(1)\) 组合即可。
总的预处理复杂度 \(O(n\sqrt{n})\),程序总复杂度为 \(O(n\sqrt{n})\)。
(未施工...
文化课:
数学补了向量的加减数量积,学了三点共线定理和等和线的应用,U1还剩数量积习题,正余弦定理和解三角形
物理补了动量冲量,动量定理和动量守恒定理,写了大小本,感觉差不多了(

浙公网安备 33010602011771号