做题记录 25.6.16
\(\textcolor{purple}\odot\) CF1749F Distance to the Path
令 \(adv_{u,d}\) 表示子树 \(u\) 内到 \(u\) 的距离为 \(d\) 的点的权值增量
则点 \(u\) 的答案为 \(\sum_d adv_{f^d_u,d}\),其中 \(f^d_u\) 表示 \(u\) 的 \(d\) 级祖先
对于修改 \((u,v,k,d)\),令 \(l=\text{lca}(u,v)\),路径 \(u-v\) 拆为 \(u-l\)(不含 \(l\)),\(l\),\(l-v\)(不含 \(l\))三部分,要使三部分不交,则第一、三部分都只考虑子树内且距离恰好等于 \(d\),第二部分为完整的
每条直链可以拆为两条从 \(1\) 到某个结点的链(含两端),即 \(adv_{(u,f_u,f_{f_u},\cdots,1),d}\) 加上 \(k\),转化为单点加和子树求和,每个 \(adv_{\ast,d}\) 开一个树状数组即可
时间复杂度 \(O(md\log n)\)
\(\textcolor{purple}\odot\) CF1740F Conditional Mix
令 \(c_x\) 为 \(a_i=x\) 的数量
相当于把 \(\{a\}\) 划分为若干集合,满足同一集合中数互不相同,求划分出的集合的大小构成的可重集的数量
对于一种划分 \(X\),若存在 \(S_1\in X,S_2\in X\),且 \(|S_1|>|S_2|\),则 \(S_1\) 中至少存在一个元素和 \(S_2\) 中所有数都不同,把它划分到 \(S_2\) 中仍然为一种合法划分
因此对于可重集 \(S\),将其中的数从大到小排列为 \(v_{1\sim n}\)(若 \(|S|<n\) 则补 \(0\)),若可以得到 \(S\),则可以使 \(v\) 变为满足 \(\forall 1\le i\le n,\sum v_{1\sim i}\ge v'_{1\sim i}\) 的 \(v'\),即 \(\{v'\}\) 同样可以得到
将 \(c\) 从大到小排序后,\(\sum v_{1\sim i}\) 的上限为 \(s_i=\sum_{i=1}^n \min(i,c_i)\)
因此对于所有 \(v_{1\sim n}\) 满足 \(\forall i,\sum v_{1\sim i}\le s_i\) 且 \(v\) 单调不升,\(\{v\}\) 都可被表示出,因此转化为求满足要求的 \(v\) 的数量
令 \(f_{i,j,k}\) 表示 \(v_{1\sim i}\) 和为 \(j\),最小值(最后一个值)\(\ge k\) 的方案数,初始 \(f_{0,0,\ast}=1\),转移为
由于 \(k\le \frac ni\),滚动数组容易做到时间复杂度 \(O(n^2\log n)\),空间复杂度 \(O(n^2)\)
\(\textcolor{purple}\odot\) CF1737E Ela Goes Hiking
对于一个 \(\text L\),一开始会先合并上它左侧连续的一段 \(\text R\),设操作完后剩余 \(k\) 个 \(\text L\),合并得到的大小分别为 \(s_{1\sim k}\),令 \(p\) 为满足 \(\sum_{i=1}^{p-1} s_i\le s_p\) 的最大值,则最终剩下第 \(p\) 个 \(\text L\)
特别地,无论第 \(n\) 个选择了什么,都视为 \(\text L\)
位置 \(p\) 为最终剩下的位置当且仅当 \((\lfloor\frac p2\rfloor,p)\) 中都是 \(\text R\),\(p\) 位置为 \(\text L\),且 \((i,n]\) 中不存在 \(i\) 满足 \((\lfloor\frac i2\rfloor,i)\) 都是 \(\text R\) 且 \(i\) 位置为 \(\text L\)
总方案数为 \(2^{n-1}\),考虑求出合法方案数求出概率
显然 \(p\) 位置之前的方案数为 \(2^{\lfloor\frac p2\rfloor}\),令 \(f_p\) 为后一部分的方案数,则 \(f_n=1\),\(f_i=\sum_{j=i+1}^{2i-1} f_j\),\(p\) 位置的概率为 \(\frac{2^{\lfloor\frac p2\rfloor}f_p}{2^{n}}\)
容易前缀和优化做到 \(O(\sum n)\)
\(\textcolor{purple}\odot\) CF1736C2 Good Subarrays (Hard Version)
令 \(f_i\) 表示以 \(i\) 为左端点能取到的最大长度,则 \(f_i=\min(f_{i-1}+1,a_i)\),答案为 \(\sum_i f_i\)
对于修改 \((p,x)\),设修改后的 \(f\) 为 \(f'\),则 \(f'_{1\sim p-1}=f_{1\sim p-1}\),\(f'_p=\min(f_{p-1}+1,x)\)
令 \(q\) 为第一个 \(>p\) 且满足 \(f'_q=a_q\) 的位置(若不存在则 \(q=n+1\)),则 \(f'_q\) 之后的都可确定,考虑预处理 \(g_q\) 表示 \(f_q=a_q\) 时 \(\sum f_{q\sim n}\) 的值,则这部分贡献为 \(g_q\)
\(\forall p<i<q\),\(f'_i=f'_{i-1}+1\),得到 \(q\) 后容易计算这部分总和
问题转化为求 \(q\) 和 \(g_{1\sim n}\)
对于一个询问 \((x,p)\),若一个 \(q\) 合法,则 \(f'_{q-1}=f'_p+(q-p-1)\),由于 \(f'_q=a_q\),可得 \(a_q< f'_p+q-p\),即 \(a_q-q<f'_p-p\)
把所有 \((a_i,i)\) 和询问的 \((f'_p,p)\) 并在一起按 \(a_i-i\) 和 \(f'_p-p\) 从小到大排序,依次考虑,用集合 \(S\) 维护目前为止可以作为 \(q\) 的位置集合,若当前扫到 \((a_p,p)\),令 \(q\) 为 \(S\) 中第一个 \(>p\) 的,则 \(g_p=g_q+\sum_{i=0}^{q-p-1}(v+i)\),若扫到 \((f'_p,p)\),则答案为 \(s_{p-1}+\sum_{i=0}^{q-p-1}(v+i)+g_q\)
时间复杂度 \(O((n+m)\log(n+m))\)
\(\textcolor{purple}\odot\) CF1738F Connectivity Addicts
将点按 \(d\) 从大到小排序,设目前最大的未染色点为 \(u\),依次询问 \(u\) 的出点,若已染色,则将之前问到的点(包括 \(u\))染为当前点的颜色,并退出,否则继续,直到询问完所有出点,则新建一种颜色
每次的询问次数不超过染上颜色的点的数量,因此总询问次数不超过 \(n\)

浙公网安备 33010602011771号