2025.1.31 NOI 模拟赛 题解
T1 P130365 [省选二十连测第十八套 ] --T1--树
题意
给定一棵树,维护一个点集,初始为空,每次加入一个点或删去一个点,每次操作后求出点集的导出子图中最大连通块的大小,\(n\le3\times10^5,q\le2\times10^5\)
分析
额外增加 \(0\) 号点作为根的父亲,若点 \(i\) 在点集中则连接 \(i\) 和 \(fa_i\)
则转化为每次断开或连接一条边,求出连通块的去掉根后得到的全体子连通块的大小的最大值
轻重链剖分,考虑对于每个点 \(u\) 维护 \(bs_u\) 表示子树 \(u\) 内以 \(u\) 为根的连通块的大小,\(S_u\) 表示 \(u\) 的所有在点集内的儿子的 \(bs_u\) 的可重集,其中 \(bs\) 用线段树按 \(\text{dfs}\) 序维护
可以做到 \(O(n\log n+q\log^2n)\)
T2 P130366 [省选二十连测第十八套 ] --T2--最近公共祖先 \(\quad\) QOJ #4914. Slight Hope
题意
给定一棵树,\(i\) 的父亲为 \(fa_i\),保证 \(fa_{i-1}\le fa_i<i\),有点权 \(a_i\),每次给定 \(l,r\) 求 \(\sum_{i=l}^r \sum_{j=l}^r[l\le \text{lca}(i,j)\le r]a_ia_j\),\(n\le 250000\),强制在线
分析
根据 \(fa_{i-1}\le fa_i<i\) 的条件,令 \(g_i=\max\{j\mid fa_j<i\}\),则 \([l,\min(g_l,r)]\) 中点互无祖先关系且它们的子树并覆盖 \([l,r]\)
考虑对于 \(l\sim r\) 每个点将其权值加到 \([l,\min(g_l,r)]\) 中它的祖先上,则最终答案为 \([l,\min(g_l,r)]\) 中每个点的权值的平方和
先考虑离线的情况,将询问放到右端点
依次枚举右端点 \(r\),枚举 \(r\) 的祖先 \(x\),将其权值加上 \(a_r\),一次查询 \([l,r]\) 的答案为 \([l,\min(g_l,r)]\) 的区间平方和
暴力实现为 \(O(n^2)\) 的,考虑操作分块,设块长为 \(S\)
设之前块中得到的权值序列为 \(s\),处理其前缀平方和,容易 \(O(1)\) 得到前面块对当前块中询问的贡献
对于当前块中的询问 \([l,r]\),先求出前面部分的贡献,然后枚举当前块左端点到 \(r\) 这些操作的贡献,处理方式为通过 \(O(1)\) \(k\) 级祖先得到操作点在 \([l,\min(g_l,r)]\) 内的祖先(或判定不存在,此时无贡献,跳过),加到 \(s\) 上并跟新答案,最终需要复原
时间复杂度 \(O(\frac nS\times n+q\times S)\),取 \(S=O\left(\sqrt{\frac{n^2}q}\right)\) 可以做到 \(O(\sqrt{n^2q})\)
对于每个块预处理 \(s\) 和其前缀平方和,则可以做到强制在线,时间复杂度不变,空间复杂度 \(O(\sqrt{n^2q})\),对于原题可能需要适当调整块长
T3 P130367 [省选二十连测第十八套 ] --T3--中位数 \(\quad\) CF1761F2 Anti-median (Hard Version)
题意
给定长度为 \(n\) 的不完整的排列,求合法的填充方式,使得得到的排列不存在长度为 \(\ge 3\) 的区间使得区间中点等于区间中位数,\(n\le 5\times10^5\)
分析
可证一个排列合法当且仅当:
- \(p_1<p_2,p_2<p_3,\cdots\) 交替成立
- \(p_1<p_2\) 时奇数位的序列单谷,偶数位单峰,\(p_1>p_2\) 时与之相反
连出环 \(1-3-\cdots-4-2-1\),从小到大填数,则任意时刻已经填的位置为环的一个区间
将填数的过程放到数轴上考虑,初始位置为 \(1\) 的位置,环上若在左侧填一个数则向左移一位,否则向右移一位,发现要满足要求需要保持整个过程在 \([1,n]\) 内
令 \((x,y)\) 表示已经填了 \(\le x\) 的数,目前位置在 \(y\) 的状态
将 \((x,y)\) 的变化绘制为平面上的折线,则起点为 \((1,\ast)\),终点为 \((n,\ast)\),则每个给定的 \(p_a=b\) 相当于给定两个 \((b,\ast)\) 要求必须经过其中之一(实际上是要求必须经过 \((b-1,\ast\pm 1)-(b,\ast)\) 的一段折线,不过是容易处理的,需要特判 \(p_x=1\) 的约束)
给的起点和终点要求不超出 \(1\le y\le n\) 范围的路径数容易反射容斥做到 \(O(1)\),因此存在限制时容易 \(dp\) 做到 \(O(n)\)
不存在限制时,相当于给定 \(n\) 个起点和 \(n\) 个终点求总合法路径数,拆开后容易优化到 \(O(n)\)
总时间复杂度 \(O(n)\)
比赛结果
\(100+20+24\),\(\text{rk}3\)

浙公网安备 33010602011771号