2026.9.20 模拟赛
https://oj.gxyzh.com/d/hzoj/contest/6aaf218051f50c2bea2e5381
序列
我们可以枚举两端的 \(x\) 的大小,选择最靠边的位置 \(L,R\),选择中间的 \(<x\) 的点即可.
可以使用扫描线做到 \(O(n\log n)\),双指针 \(O(n)\).
树
想到哈希,这道题就结束了.
之后在可持久化线段树上维护即可.
时间复杂度为 \(O((n+q)\log n)\)
六元组
题目要求我们求:
考虑做一个差分:
其中 \(pr_a\) 表示 \([1,r_a]\) 的权值,为 \(1/-1\).
现在我们需要解决上面的式子:
考虑使用扫描线解决 \([x_b\le r_a]pr_a\).
将 \(a\) 按照 \(r_a\) 排序,\(b\) 按照 \(x_b\) 排序,依次添加.
维护 \(w(c)\) 表示满足 \([x_c\le r_b]\) 的 \(pr_b\) 的值.
修改,对于所有 \([x_c\le r_b]\) 的 \(w(c)\),添加 \(pr_b\) 的增量.
查询:\(\sum [x_a\le r_c]w(c)pr_c\).
我们不难发现有两个维度 \(r_c\) 与 \(x_c\),并且是区间修改,考虑使用分块.
整块维护按照 \(x_c\) 进行排序,这样修改时就是修改一个前缀,散块暴力重构.
整块内按照 \(r_x\) 进行排序,这样查询时就是查询块内一个后缀.
可以预处理每个块 \(\ge x_a\) 的位置,需要使用 \(O(n^{\frac 32})\) 的空间.
同时需要处理有关懒标记的信息,较为容易实现.
因此上面算法时间复杂度为 \(O(n^{\frac 32})\),需要卡常.
图
观察式子:
考虑将 \(\text{deg}\) 展开:
考虑其组合意义:对于一个图 \(G'\),对于每一个点 \(u\),选择钦定相连的一条边/选择不钦定,式子表示的就是所有情况的总贡献.
考虑上 \(E[W(G')]\) 同理,上面的转化组合意义的过程被称作 product trick.
因此可以使用状压 DP 解决:记录 \(n\) 个节点的状态,0 表示未钦定,1 表示已钦定.
现在按照任意顺序考虑一条边 \((u,v,p)\).
则有如下转移:
- 选择这条边不出现:\(f_{S}\times p\to f'_{S}\)
- 选择这条边出现:\(f_{S}\times (1-p)\to f'_{S},f'_{S+u},f'_{S+v},f'_{S+u+v}\)
若有 \(u,v\) 的状态已钦定,则不能转移.
最终答案为 \(\sum_{S}f_S\times t^{n-|S|}\)
时间复杂度为 \(O(2^nm)\).
由于题目中给出的性质,我们可以按照大小为 \(k\) 进行分块.
那么连边只有块内的连边以及相邻的块的连边.
考虑只进行状压相邻块的状态,则时间复杂度为 \(O(2^{2k}m)\).
考虑一个贪心的优化:对于已经连过边的点,可以直接删去;对于未添加的点,可以不记录状态.
需要动态实现二进制的表示,这里可以直接重构,因为每个数只会加入以及删去一次.
时间复杂度为 \(O(2^{1.5k}(n+m))\).
但事实上我们还可以进行优化,因为我们还没有利用性质 2:
每次转移的时候,先进行层间的转移,这一部分是 \(O(2^k(n+m))\) 的,不用优化.
之后从第 \(i\) 层向第 \(i+1\) 转移,考虑第 \(i\) 层的点向 \(x,y\) 连边:
我们进行的优化是:建出辅助图,\((x,y)\) 连边,若 \(x=y\) 则连一条自环.
这样第 \(i+1\) 层会构成若干个连通块.
每一条边表示:若 \(x,y\) 都被添加,则 \((x,y)\) 对应第 \(i\) 层的点可以直接删去.
因此考虑对连通块按照 \(|V|-|E|\) 从小到大排序,提取连通块的一棵 dfs 树,按照 dfs 序进行添加.
这样可以发现,每个时刻状态集合的大小总是 \(\le k+1\),时间复杂度为 \(O(2^k(n+m))\).

浙公网安备 33010602011771号