正睿寒假杂题选讲1

QOJ8005. Crossing the Border

很显然的暴力,我们将 \(b_i\) 升序排序,然后按照集合右端点从小到大加入保证方案不重,这样子复杂度是 \(O(3^n)\)

考虑利用 \(\sum a_i \le m\) 的这个约束,可以想到类似 meet-in-middle 的思想,我们将集合分为两部分,每部分 \(\frac{n}{2}\) 个二元组,然后进行匹配。

我们可以枚举一个中间状态 \(LR\),表示从左边选出 \(L\),从右边选出 \(R\),在这个基础上匹配。我们可以从 \(L\) 的子集内选取集合转移到 \(R\) 的超集之中。假设 \(L'\subset L\)\(R \subset R'\),那么我们需要做的就是 \(L'R \to LR'\)。同样由于每次我们要加入包含最大右端点的集合,所以 \(L'\) 应该不含 \(\operatorname{maxbit}(L)\),这样新加入的部分 \(L-L'\) 满足最高位最新加入。\(R\) 同理。然后利用 \(\sum a_i \le m\),我们可以事先对于 \(L'\)\(R'\) 按照 \(\sum a_i\) 排序,然后只需要枚举 \(L'\),同时对于 \(R'\) 双指针即可。

这样子我们相当于枚举了 \(L\) 及其子集,这是 \(O(3^{\frac{n}{2}})\) 的。同时枚举了 \(R\),这是 \(O(2^{\frac{n}{2}})\) 的。所以总的复杂度为 \(O(6^{\frac{n}{2}})\)

8074. Multiply Then Plus

\(y=a_i\times x+b_i\),那么 \(b_i=(-x)\times a_i+y\)

如果没有修改,对于不同 \(x\) 全局查询。那么就是维护一个在 \(b_i-a_i\) 的坐标系中维护一个上凸壳。每次对于斜率 \(-x\) 进行二分即可。如果改为先对 \(-x\) 排序,再离线查询可以做到线性。

如果是区间的话,可以用线段树维护凸包,每次将询问分裂为 \(\log\) 个询问取最大值。同理如果每次二分的话,是 \(O(n\log^2n)\) 的。但是我们还是可以对于 \(-x\) 排序,然后对于线段树每个节点维护一个指针,表示上次扫描到哪里了,每次移动指针就行了。可以做到 \(O(n\log n)\)

本题有了修改操作可以进行线段树分治。

QOJ7514. Clique Challenge

\(n\le 40\),还是考虑分成两部分,左右两边分别内部处理子集。然后对于左边每一个子集求出到右边
对于 \(n\) 更大的时候(图为一个稀疏图),我们可以将问题分成若干个。考虑三元环计数的时候。
先给图定向,给度数小的连向度数大的,连出来的是一个 DAG,

QOJ7899. Say Hello to the FutureA

一个区间合法的要求是区间最大值小于等于区间长度。直接 dp 复杂度应该是 \(O(n^2)\) 的。

QOJ7610. Bus Lines

如果是单点求解的话,就是贪心往上跳。
一般这种对于所有信息的求和都是要分治。这题是统计树上路径所以用点分治,有一个设 \((u,v)\)的 lca 是 \(r\)。有一个很重要的性质:\(f(u,v) \le f(u)+f(v) \le f(u,v)+1\)。所以我们先按后者来计算。然后发现如果可以取到下界的话,需要在 \(u-r\)\(r-v\) 路径中各存在 \(p_u\)\(p_v\) 是的二者可以直接联通。可以用树上启发式合并来计算。

QOJ7630. Yet Another Maximize Permutation Subarrays

QOJ8131. Filesystem

QOJ837

点分治。考虑原图的一颗生成树,进行点分治。但可能有一些非树边使得路径更短。分为两种,非树边在同一子树内,或者在不同子树内。第一种情况直接从分治中心出发,进行最短路,第二种情况我们发现如果 \((u,v)\) 可以通过分治中心到达或者不同子树内的边到达的话,说明分治中心和那条非树边成环。对于每个分治中心,这种环不超过过。注意每次分治在同一子树内的可能也需要更新。

P9732 [CEOI2023] Trade

我们发现贡献函数 \(f(l,r)\) 满足四边形不等式,于是有决策单调性。

CF1889D Game of Stacks

DFS Order 4

我们可以反向通过将数填入序列来还原树。

posted @ 2024-02-17 09:12  Mirasycle  阅读(142)  评论(0编辑  收藏  举报