2025.6.27 NOI 模拟赛 题解
T1 #P1254. 倍杀 \(\quad\) SP707 TFSETS - Triple-Free Sets
题意
给定 \(n\),求出 \(\sum_{S\subseteq([1,n]\cap\mathbb N)}[\exists x\in S,2x\in S\land 3x\in S]\),\(n\le5\times10^7\),多测 \(t\le5\)
分析
显然等于 \(2^n-\sum_{S\subseteq([1,n]\cap\mathbb N)}[\forall x\in S,2x\notin S\lor 3x\notin S]\),考虑如何计算 \(\sum_{S\subseteq([1,n]\cap\mathbb N)}[\forall x\in S,2x\notin S\lor 3x\notin S]\)
建立 \(n\) 点的图,\(x\to 2x\),\(x\to 3x\),则转化为给图黑白染色,使得不存在 \(x,2x,3x\) 同时染黑色,求染色方案数
每个 \(i\) 分解为 \(i=2^p\times 3^q\times r\),其中 \(p\) 为满足 \(2^p\mid i\) 的最大值,\(q\) 为满足 \(2^q\mid i\) 的最大值,\(2\nmid r,3\nmid r\),记为 \((p,q,r)\)
则 \((p,q,r)\) 连向 \((p+1,q,r)\) 和 \((p,q+1,r)\),\(2^p3^qr\le n\) 的 \((p,q,r)\) 存在
显然每个 \((\ast,\ast,r)\) 之间独立,考虑其中一个
其形状类似杨表,要计算其染色方案数
从下到上考虑每一行,令 \(f_s\) 表示前一行染色为 \(s\) 的方案数,\(g_s\) 表示当前行染色为 \(s\) 的方案数,其中 \(s\) 为一个集合,保存了染为黑色的位置
对于 \(g_s\),令 \(p=\{x\mid x\in s\land x+1\in s\}\),则 \(p\) 中的位置可以染为黑色,即 \(g_s\gets f_t\mid t\subseteq p\)
总时间复杂度 \(O(t(n+\log_2 n\log_3 n\times \log_2 n \log_3 n2^{\log_3 n}))=O(t(n+n^{\log_32}\log^4 n))\),需要一定程度的卡常
T2 #P1255. 展望 \(\quad\) P11750 「TPOI-1D」谢谢您。
题意
给定 \(a_{1\sim n},l_{1\sim m},r_{1\sim m}\),\(q\) 次询问,每次给定 \(L,R,k\),求出 \(\max_{L\le i\le R}\sum_{l_i\le x\le r_i}[a_x=k]\),\(n,m,q\le2\times10^5\)
分析
考虑根号分治,令阈值为 \(S\)
令 \(p_k\) 为 \(a\) 中值 \(k\) 出现位置的集合
对于 \(|p_k|>S\) 的询问,枚举 \(k\)(这样的 \(k\) 不超过 \(\frac nS\) 个),对于每个 \(k\),\(O(n)\) 求出每个前缀中 \(k\) 的数量,据此 \(O(m)\) 求出每个 \([l_i,r_i]\) 的答案,建立线段树,然后枚举对应的询问处理,这部分时间复杂度 \(O(\frac nS(n+m)+q\log m)\)
然后考虑 \(|p_k|\le S\) 的询问
一组询问 \((L,R,k)\) 的答案,等于枚举 \(u\in p_k\),求出 \(v=\max_{L\le i\le R,l_i\le u}r_i\),\(\sum_{i=u}^v [a_i=k]\) 的最大值
从 \(1\) 到 \(n\) 扫描,设目前扫描到 \(x\),维护 \(b_{1\sim m}\mid b_j=[l_j\le x]r_j\),则每到一个新的 \(x\),先枚举 \(l_i=x\) 的 \((l_i,r_i)\) 令 \(b_{i}\gets r_i\),然后枚举询问 \((L,R,k)\mid k=a_x\),令其答案对 \(cnt(i,\max_{L\le i\le R}b_i,a_i)\) 取 \(\max\),其中 \(cnt(L,R,v)\) 表示 \(a[L:R]\) 中 \(v\) 的数量
对 \(b\) 的修改为 \(m\) 次单点取 \(\max\),\(O(Sq)\) 次求区间 \(\max\),分块套 \(\text{ST}\) 表维护 \(b\),做到 \(O(\sqrt m)\) 修改,\(O(1)\) 查询
每个 \(cnt\) 容易 \(O(\log n)\) 求出,发现对于一个询问,其对应的 \(cnt(L,R,k)\) 中 \(L\) 和 \(R\) 分别单调递增,双指针即可,总移动距离为 \(O(qS)\) 的
这部分时间复杂度 \(O(m\sqrt m+qS)\)
总时间复杂度 \(O(\frac nS(n+m)+q\log m+m\sqrt m+qS)\),空间复杂度 \(O(\sqrt m(\sqrt m\log\sqrt m)+n+q)=O(m\log m+n+q)\),取 \(S=\sqrt{\frac{n(n+m)}q}\) 可做到 \(O(q\log m+m\sqrt m+\sqrt{qn(n+m)})\)
T3 #P1256. AT_arc616_byd \(\quad\) CF1621I Two Sequences 加强版
题意
对于 \(a_{1\sim n}\),定义对 \(a\) 的一次操作为依次考虑 \(l=1\sim n\),用 \(a\) 中长为 \(l\) 的字典序最小的子串覆盖最后 \(l\) 个位置,\(q\) 次询问 \((x,y)\),求出 \(x\) 次操作后的 \(a_y\),\(a_i,x,y\le n\le4\times10^5,\;q\le10^6\)
分析
考虑其中一个 \(l\) 的操作
设选择的为 \([x,x+l)\),则 \(\forall 0\le i<l,a_{n-l+i}\gets a_{x+i}\),等价于把 \(a[x,n-l]\) 复制一份插入它之后,然后保留前 \(n\) 个值,等价于用 \(a[x,n-l+1]\) 替换 \(a_{n-l+1}\) 后保留前 \(n\) 个值,等价于选择 \(a[1,n-l+1]\) 的任意非空后缀替换 \(a_{n-l+1}\) 后保留前 \(n\) 个值
显然选择的子串字典序最小等价于变换后的 \(a\) 字典序最小,因此对于一个 \(l\),它对 \(a\) 的改变为:选择 \(a[1,n-l+1]\) 的任意非空后缀替换 \(a_{n-l+1}\) 后保留前 \(n\) 个值,使得变换后的 \(a\) 最小
因此一次操作转化为依次考虑 \(l=n\sim 1\),选择 \(a[1,l]\) 的任意后缀替换 \(a_l\) 后保留前 \(n\) 个值且使得变换后字典序最小
此时每个 \(l\) 独立,一次操作转化为:对于每个 \(1\le i\le n\) 选择一个 \(1\le f_i\le i\),选好后对于每个 \(1\le i\le n\) 将 \(a_i\) 替换为 \(a[f_i,i]\)(替换同时进行),只保留前 \(n\) 个值,使得变换后的字典序最小
从后往前考虑每个 \(f_i\),令 \(mn_i\) 为 \([1,i]\) 的最小后缀,令 \(c_i\) 为满足 \((mn_i)^{c_i}\) 为 \([1,i]\) 的后缀 的最大值,可证 \(f_{i+1}=i+1\) 时 \(f_i=i-|mn_i|+1\),否则 \(f_i=i-c_i|mn_i|+1\)(显然 \(f_n\) 取两者最终得到的序列相同)
问题转化为求出 \(|mn_i|\) 和 \(c_i\)
求出 \(|mn_i|\) 后 \(c_i\) 可二分解决,具体地设二分的值为 \(x\),若 \(a[i-|mn_i|x+1,i-|mn_i|]=a[i-|mn_i|(x-1)+1,i]\) 则 \(c_i\ge x\),否则 \(c_i<x\)
因此考虑如何求出 \(|mn_i|\)
求出后缀数组,令 \(p_i=\min_{j=1}^i rk_j\) 表示 \([1,i]\) 中对应后缀字典序最小的位置,则 可证 \(mn_i\) 为 \([p_i,i]\) 的最短 \(\text{Border}\)(此处 \(\text{Border}\) 可包含原串,下同)
按 \(1\sim n\) 的顺序枚举 \(i\),维护 \(S=\{j\mid a[j,i]\text{ is Border of }a[p_i,i]\}\),则 \(|mn_i|=i-\max S+1\),维护方式为先加入 \(i\),然后删除最大值直到最大值对应位置合法(即用栈保存 \(S\))
可证 有效操作次数不超过 \(O(\log\log n)\),因此时间复杂度 \(O(n\log n\log\log n+q)\)
比赛结果
\(25+30+25\),\(\text{rk}11\)

浙公网安备 33010602011771号