朝花夕拾(Ynoi)
这是已完成的 Ynoi 题目,题解将持续更新。
目前完成 \(25\) 道。
[Ynoi2011] 初始化
思路:根号分治+分块
[Ynoi Easy Round 2016] 掉进兔子洞
首先答案就是 \(r_1-l_1+1+r_2-l_2+1+r_3-l_3+1-3\times k\) 其中 \(k\) 为在三个区间中都出现的个数。
初步思路是对于每个区间用 \(bitset\) 维护出现数的集合,然后再求一下与,时间复杂度 \(O(\frac{n^2}{\omega})\) 。
有一个小问题就是每个数会出现多次。
但这是容易的,只要满足维护的集合中相同的元素从当前元素的起始位置开始连续排布就是对的了,然后用莫队维护集合就行了。
此题要卡空间,可以将问题分成三块处理。
[Ynoi2007] rfplca
一种类似重链剖分的方法,将路径中的一些边压缩。
具体的,将序列按 \(\sqrt n\) 分块,记录每个点到它所在块能跳到的最前端的点,这样一步称之为大步。
找两个点的 \(lca\) 可以先跳大步,再一步一步跳,与重链剖分找 \(lca\) 的过程类似,时间复杂度 \(O(\sqrt n)\)。
对于修改操作,散块直接处理,整块打标记和下放。
发现整块的操作总和大于 \(\sqrt n\) 时,所有点的大步都走不了了,所以每块最多用下放 \(O(\sqrt n)\) 次,之后直接用一个标记就行了。
总时间复杂度 \(O(n\sqrt n)\) 。

浙公网安备 33010602011771号