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})\),对于原题可能需要适当调整块长

MX

QOJ

T3 P130367 [省选二十连测第十八套 ] --T3--中位数 \(\quad\) CF1761F2 Anti-median (Hard Version)

题意

给定长度为 \(n\) 的不完整的排列,求合法的填充方式,使得得到的排列不存在长度为 \(\ge 3\) 的区间使得区间中点等于区间中位数,\(n\le 5\times10^5\)

分析

可证一个排列合法当且仅当:

  1. \(p_1<p_2,p_2<p_3,\cdots\) 交替成立
  2. \(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)\)

MX

CF

参考

比赛结果

\(100+20+24\)\(\text{rk}3\)

posted @ 2026-02-02 15:23  Hstry  阅读(20)  评论(0)    收藏  举报