14
https://www.luogu.com.cn/problem/P14638
考场上写了个 \(O(nq\log)\) 的猫树分治。我发现这个东西可以过 \(L=R\) 的所有点,场上我以为只是因为常数小,后来想一想才发现当 \(L=R\) 时这个东西就是线性的。进一步地,当 \(2L\ge R\) 时这个东西也是线性的。所以考虑预处理出所有 \([2^k,2^{k+1})\) 的答案,查询的时候散块部分就满足 \(2L\ge R\),然后就 \(O(nq)\) 了。
https://qoj.ac/contest/2559/problem/14419
首先考虑求最大子段和不超过 \(k\) 的方案数。
你相当于要做 \(s\gets \max(s+a_i,0)\) 这种过程。如果没有这个取 \(\max\) 是很好做的,一组合法的方案等价于一条从 \((0,0)\) 开始,不经过 \(y=k+1\) 的折线。但是有了这个取 \(\max\) 之后会多一个从 \(0\) 到 \(0\) 的转移,这看起来不太符合折线的性质了。
结论:一组合法的方案等价于一条从 \((0,0)\) 开始,不经过 \(y=k+1\) 和 \(y=-k-2\) 的折线。
证明:考虑把 \((x,0)\) 到 \((x,-1)\) 或 \((x,-1)\) 到 \((x,0)\) 的一条线段看成从 \(0\) 到 \(0\) 的转移,然后沿 \(y=-0.5\) 把坐标系对折,然后方案显然就一一对应了。
然后反射容斥。
https://www.luogu.com.cn/problem/AT_pakencamp_2023_day3_i
有一个很显然的暴力叫做,把限制和点看成左右两部点,然后连边跑费用流。
考虑 Hall 定理。我们把原题的表述改成,选出权值和尽可能大的一些限制,使得这些限制的任意一个子集都满足 Hall 定理。
注意到如果选出的子集内有两个限制不为祖孙关系,那一定是满足 Hall 的;如果 \(x\) 选了但 \(fa_x\) 没选,那么选上一定不劣。所以我们只需要 check 一条到根的链。
于是问题变成:选出一些限制,满足对于任意点 \(x\),\(x\) 到根这条链上的限制数量之和 \(\le n-sz_x\),然后最大化选出的限制权值和。
这个可以直接贪心:对每个点维护一个堆,初始存储这个点上的所有限制。 dfs 整棵树,如果 \(x\) 有一个儿子叫 \(y\),那么把 \(y\) 的堆里最大的 \(sz_x-sz_y\) 个元素给 pop 掉,然后把 \(y\) 的堆并到 \(x\) 的堆里。最后答案就是 \(1\) 的堆内元素之和。
启发式合并维护,复杂度 \(O(n\log^2 n)\)。
https://www.luogu.com.cn/problem/P14608
这也太难了。
考虑猫树分治,对于一个跨过 \(mid\) 的询问 \([L,R]\),求出 \([L,mid]\) 和 \([mid+1,R]\) 的 LIS 长度 \(x,y\),显然有 \(\max(x,y)\le ans\le x+y\),取 \(\lfloor\frac{\max(x,y)+x+y}{2}\rfloor\) 作为答案即可。
http://xsy.gdgzez.com.cn/JudgeOnline/problem.php?cid=2352&pid=1
这也太难了。
问题等价于,\(a,b\) 两个数组上的每个位置都有一个限制,形如 \(\le lim\) 或 \(\ge lim\),对 \(a,b\) 内元素集合相同的方案计数。
考虑只有 \(\le lim\) 怎么做,直接 dp。考虑把 \(\ge lim\) 的限制容斥成 \(\le lim-1\)。但是有一个问题,如果没有钦定 \(\le lim-1\),会多出来一条任意选的限制。所以在 dp 的初始状态里面直接把钦定了多少个给确定下来,然后直接转移了,复杂度 \(O(Vn^4)\)。
感觉讲得好抽象,简单来说就是在 dp 初始状态里面钦定一部分选择。
http://xsy.gdgzez.com.cn/JudgeOnline/problem.php?cid=2352&pid=2
考虑怎么算一个 \(f_k\)。对每个 \(i\) 找到最小的 \(j>i\),使得 \(s[i\dots i+k-1]=s[j\dots j+k-1]\),然后就做完了。用 SA 预处理一下,算一个 \(f\) 就可以线性了。
答案只有 \(O(\sqrt n)\) 个,套路地考虑分治,做完了。

浙公网安备 33010602011771号