杂题 day2

复习:

A

直接上线段树或者 ODT 即可。

B

一个区间的 \(\text{mex}\)\(x\) 说明
\(0\sim x-1\)都在这个区间里,\(x\) 不在。

\(x\) 被所有的 \(\text{mex}\) 大于 \(x\) 的区间包含,不被 \(\text{mex}=x\) 的区间包含。

\(x+1\) 的区间要么包含 \(x\) 的区间,要么和 \(x\) 的区间无交,因此从小往大贪心就是对的。

C

左边放能力值,右边放 team,那么这个就是一个二分图。

从小往大贪心对能力值进行优先地匹配,即可得知 \(\text{mex}\) 的最大值。

将删除倒序改为插入,每次在上次的基础上继续匹配即可。

D

板子。

可以用莫队,或者持久化线段树维护每个数出现的最晚时间,查询最小的在区间前出现的数即可。

E

mex 和 xor 并没有显然的性质,考虑可行性 dp。

\(f_{i,j}\) 表示前 \(i\) 个数能否表示出 \(j\)\(n^3\) dp 是显然的。

考虑能否优化这个东西,有一个叫“极小mex区间的东西”,意思是不存在被它包含的区间mex等于他,结论是极小mex区间最多只有 \(2n\) 个。

证明:
假设有一个极小 mex 区间 \([l,r]\),他的 mex 不等于 \(0\)
假设 \(a_l>a_r\)\(a_l\) 不等于 \(a_r\),否则删去一个一定不劣。
\(\text{mex}(l,r)\) 肯定大于 \(a_l\),因为不能等于,小于的话把 \(l\) 踢出去肯定不劣。
我们假设存在另一个极小 mex 区间 \([l,p]\),且 \(a_l>a_p\)
由于 \(\text{mex}(l,r)>a_l>a_p\) ,所以 \(a_p\) 肯定在 \([l,r]\) 中出现过。因此 \([l,p]\) 肯定不是极小 mex 区间。
所以一个 \(x\) 作为左右端点之多只会分别贡献一次。

那么我们发现 mex 一样的时候,取用更小的肯定不劣。
那么我们只把极小 mex 区间拿出来 dp,就是对的啦

F

考虑设 \(g_i\) 表示包含 \(0\sim i\) 之间所有数的路径数量

那么 mex 为 \(k\) 的路径数量就是包含 \(0\sim k-1\) 但是不包含 \(k\) 的路径数量,也就是 \(g_{k-1}-g_k\)

那么假如我们建出点 \(0\sim k-1\) 的虚树(其实并不用真的建出来啦),假如这个树的形态是一个链,答案就是链两端的子树大小之积。假如不是,答案就是 \(0\)

具体实现的时候可以 \(0\) 为根建树,然后维护链两端的编号,可以做到 \(O(n)\)

G

\([i,j]\) 的 mex 值放在平面上 \((i,j)\) 点上。

先预处理出右端点在 \(n\) 的区间的 mex 值,然后考虑从最后一个开始删除。

假设删除了一个 \(k\),那么从 \(k\)\(pre_k+1\) 中间的所有 \(>k\) 的 mex 数都变成 \(k\)

这个可以用珂朵莉树维护,显然均摊 \(O(n)\)

把珂朵莉树过程中每一个区间的存活时间看做一个矩阵,那么从左下角到右上角的(区间长度)值就是能贡献到的范围。

按区间长度从小到大扫描线,过程中维护 mex 即可。

H

考虑判定答案能否为 \(k\),那么假如我们删除了边权等于 \(k\) 的边后,图仍然联通,那么我们就可以说(最小mex生成树的)mex 肯定不大于 \(k\)

于是可以线段树分治,每次递归一边插入另一边,过程中用带删并查集维护即可。

I

考虑你有两种方式减小答案,一种是往 mex 的位置(这个位置上没有数)移一个数过去,那么 mex 会至少增加 1。

另外一种是把大于 mex 的数移走,相同的要全部移走,答案会减少 1。

因此使用第一个操作肯定是不劣的。先算出 mex 最大能是多少,然后把大于 mex 的贪心尽量往下移即可。

J

首先如果路径里有 0 或者 1,那么就不可能出现 2。

然后开 32 个并查集,如果边权上有一位是 1,那么就在对应的并查集上连接两个端点。

如果查询的两个点在某个并查集上联通,那么答案就是 0。

否则只要有一条路径上没有 1,答案就是 1.

那么我们在每一个并差集上额外把每个边权末位为 0 的边两端和虚点 0 连接。

那么我们的点 u 只要能和 0 联通,那就说明可以通过一些(按位与不为 1)的边,然后通过末位为 0 的边就能保证之后不出现 1 这个数,那么答案就是 1,(如果答案已经不是 0 了)。

否则就是 2。

K

不知道,场上切了,直接考了。

L

不知道,场上切了,直接考了。

M

每次操作可以把 \([l,r]\) 覆盖成 \(\text{mex}(l,r)\)

我们猜测并发现,存在一种构造性的解,使得 \([l,r]\) 最终能够被覆盖为 \(r-l+1\)

给出一种构造:

\(f(l,r)\) 表示对区间 \([l,r]\) 执行一次操作,\(g(l,r)\) 表示把区间 \([l,r]\) 变成 \(1\sim r-l\) 的排列。

那么 \(g(l,r)\) 的操作可以被表示为 \(g(l,r-1),f(l,r),f(l,r-1),g(l,r-1)\)

手摸一下可以发现这很对。

那么我们先把整个区间覆盖成 0,接着 \(g(l,r-1)\),然后再 \(f(l,r)\) 一下就可以把整个区间覆盖成 \(r-l+1\)

那么我们直接区间 dp,找出哪些区间被覆盖成 \(r-l+1\) 比原来更优,直接构造就可以啦~

N

先把整个序列复制两遍,环就可以转化为序列问题。

扫描线,扫描区间的左端点,维护每个右端点上的 mex 值,将左端点右移一位时,需要删除原来的左端点,然后插入一个新的长为 n 的区间。

删除的这个点相当于所有区间的 mex 都对这个点的值取 min。

维护可以选用吉司机线段树,\(O(n\log^2n)\),或者可以注意到 mex 单调不减,那么可以直接在线段树上二分,\(O(n\log n)\)

O

发现满足每个 mex 的区间都存在的条件的序列,肯定是下凸的,也就是先单调下降,然后单调上升。

具体证明可以看原题解。

那么每个 \(0\sim k\) 的存在区间都是一个连续的长为 \(k+1\) 的区间。那么设 \(f_{i,j}\) 表示 \(0\sim i\) 的区间位于 \([j,j+i]\) 的区间数量,直接 dp 即可。

posted @ 2025-03-16 13:25  CuteNess  阅读(22)  评论(0)    收藏  举报