做题记录 25.5.27

\(\textcolor{purple}\odot\) CF1834F Typewriter

显然答案的下界为 \(\sum_i[p_i<i]\),可证能取到这个下界

询问的过程中只会出现原序列的 \(n\) 个循环同构序列和逆序列的 \(n\) 个循环同构序列,共 \(2n\) 个序列,因此对于原序列和逆序列分别处理出每个循环同构序列的答案,考虑每个元素贡献到的循环区间即可

时间复杂度 \(O(n+q)\)

代码

参考

\(\textcolor{blue}\odot\) CF1832D2 Red-Blue Operations (Hard Version)

\(a\) 从小到大排序

\(k<n\) 时,最优方案显然为 \(\forall 1\le i\le k,a_i\gets a_i+(k-i+1)\),令 \(b_i=a_i-i+1\)\(p_i=\min_{j=1}^i b_j\),则此时答案为 \(\min(k+p_k,a_{k+1})\)

\(k\ge n,2\mid (k-n)\) 时,设位置 \(x\) 修改了 \(t\) 次,值分别为 \(v_{1\sim t}\),则这个位置最终的值为 \(a_x+v_1-v_2+\cdots -(-1)^t v_t\),显然 \(2\mid t\) 时值 \(\le a_x\)\(2\nmid t\) 时值 \(>a_x\),即位置操作奇数次更优,因此 \(n\) 个位置都操作一次,然后每次一个位置操作两次,这样 \(n\) 个位置操作次数都是奇数,一定不劣

假设先确定了 \(n\) 个位置最后操作的一次,然后每次在这之前增加两个操作,则最优情况为最后 \(n\) 次操作为 \(a_i\gets a_i+(k-i+1)\),之前每一对操作令一个 \(a_i\) 减一

问题转化为有 \(v_i\mid v_i=b_i+k\),每次选择一个 \(v_i\) 减去 \(1\),恰好操作 \(\frac{k-n}2\) 次后,最大化最小值

初始最小值为 \(p_n+k\),令 \(s=\sum b_i\),先消耗 \(\min(s-np_n,\frac{k-n}2)\) 次操作尽量令所有 \(v_i\) 都变为 \(p_n+k\),之后每消耗 \(n\) 次操作答案减一,不足 \(n\) 次视为 \(n\) 次,因此答案为 \(p_n+k-\left\lceil\frac{\max(0,\frac{k-n}2-(s-np_n))}n\right\rceil\)

\(k\ge n,2\nmid (k-n)\) 时,舍弃 \(a_n\)\(+(k-n+1)\),此时最小值 \(mn=\min(p_{n-1}+k,a_n)\),最后 \(n-1\) 次操作后总和变为 \(s-(k-n+1)+kn\),类似 \(2\mid (k-n)\) 的情况得到答案为 \(mn-\left\lceil\frac{\max(0,\frac{k-n+1}2-(s-(k-n+1)-n(mn-k)))}n\right\rceil\)

时间复杂度 \(O(n\log n+q)\)

代码

参考

\(\textcolor{blue}\odot\) CF1830C Hyperregular Bracket Strings

若区间 \([l,r]\)\([L,R]\) 相交,设 \(l\le L\le r\le R\),则 \([l,L)\)\([L,r]\)\((r,R]\) 都需要是合法括号序列

若区间 \([l,r]\) 包含 \([L,R]\),即 \(l\le L\le R\le r\),则 \([L,R],[l,L)\cup (R,r]\) 都需要是合法括号序列

对于 \(n\) 个位置,按覆盖到它的区间的集合,划分为若干等价类,则同一等价类中的位置,从左到右取出后必须组成合法括号序列,使用异或哈希即可

时间复杂度 \(O(\sum (n+k))\)

代码

\(\textcolor{purple}\odot\) CF1827D Two Centroids

设目前为止一个重心为 \(u\),令 \(S_u\) 为删去 \(u\) 后剩余的连通块,则答案为 \(n-2\max_{s\in S_u}|s|\)

维护当前的 \(u\)\(\max_{s\in S_u}|s|\) 即可,配合树状数组容易做到 \(O(\sum n\log n)\)

代码

参考

\(\textcolor{purple}\odot\) CF1830D Mex Tree

\(s_0\) 为数上 \(0\) 的连通块的大小的可重集,\(s_1\)\(1\) 的连通块大小的可重集,则答案为 \(n(n+1)-\sum_{u\in s_0}\frac{u(u+1)}2-2\sum_{u\in s_1}\frac{u(u+1)}2\),因此需要最小化 \(\sum_{u\in s_0}\frac{u(u+1)}2+2\sum_{u\in s_1}\frac{u(u+1)}2\)

\(dp_{u,0/1,s}\) 表示子树 \(u\) 中,\(u\) 值为 \(0/1\)\(u\) 所在连通块大小为 \(s\) 时,上述值的大小

取黑白染色得到的结果,\(\sum_{u\in s_0}\frac{u(u+1)}2+2\sum_{u\in s_1}\frac{u(u+1)}2\)\(O(n)\) 的,而 \(s\)\(O(\sqrt n)\) 时,代价就达到 \(O(n)\) 了,因此 \(dp\) 第三维是 \(O(\sqrt n)\)

直接合并复杂度为 \(O(n\sqrt n)\)

代码

参考

\(\textcolor{purple}\odot\) P3295 [SCOI2016] 萌萌哒

对于限制 \((l,r,L,R)\),相当于 \(\forall 0\le i<r-l+1\)\(l+i\)\(L+i\) 所在连通块合并

考虑 \(\text{ST}\) 表优化,建立 \(\lfloor\log_2(n)\rfloor+1\) 层并查集,第 \(i\;(0\le i\le \lfloor\log_2(n)\rfloor)\) 层中 \(j,k\) 在同一集合中表示 \(\forall 0\le s<2^i\)\(j+s\)\(k+s\) 在同一连通块中

一个限制容易转化为 \(O(\log n)\) 组区间合并

\(i\) 层下放到第 \(i-1\) 层时,对于位置 \(j\),设第 \(i\) 层中 \(j\) 所在集合代表元为 \(k\),则在 \(i-1\) 层中合并 \(j\)\(k\)\(j+2^{i-1}\)\(k+2^{i-1}\)

时间复杂度 \(O((n+q)\log n\alpha(n))\),应该可以做到 \(O((n\log n+q)\alpha(n))\)

代码

参考

\(\textcolor{purple}\odot\) CF1827C Palindrome Partition

\([l,r]\) 长为偶数且回文,连接 \(l-1\)\(r\),则区间 \([l,r]\) 合法当且仅当 \(l-1\)\(r\) 连通

对于每个 \(1\le i<n\) 求出最大的 \(p_i\) 使得 \([i-p_i+1,i+p_i]\) 回文,容易 \(\text{manacher}\) \(O(n)\) 求出

于是需要对于所有 \(1\le s\le p_i\)\(i-s\)\(i+s\) 连边,拆点后转化为 P3295 [SCOI2016] 萌萌哒\(\text{ST}\) 表优化即可

时间复杂度 \(O(\sum n\log n\alpha(n))\)

代码

参考

\(\textcolor{purple}\odot\) CF1827B2 Range Sorting (Hard Version)

先考虑计算一个区间 \([l,r]\) 的答案

定义 \(l\le p<r\) 为分界点当且仅当 \(\max_{i=l}^p a_i<\min_{i=p+1}^r a_i\)

当操作有交时,直接操作并显然不劣,因此最终操作的是若干不交区间

若存在一些位置没有被覆盖到,则视为这些位置分别单独操作一次,代价不变

因此可以视为把 \([l,r]\) 划分为若干区间,代价为区间长度减一之和,等于 \(r-l+1\) 减去区间数量,由于代价要最小,因此区间要最多

显然能从 \(p\)\(p+1\) 之间断开当且仅当 \(p\) 为分界点

因此答案为 \(r-l+1\) 减分界点数量加一的和

所有子段的 \(r-l\) 之和等于 \(\sum_{i=2}^n (i-1)(n-i+1)\),考虑求出所有区间的分界点数量之和

枚举 \(1\le b\le n\),令前一半的 \(\max\)\(b\) 处,令 \(a\)\(b\) 之前第一个大于 \(b\) 的位置,令 \(c\)\(b\) 之后第一个大于 \(b\) 的位置,令 \(d\)\(c\) 之后第一个小于 \(b\) 的位置,则对于 \(l\in(a,b],r\in[c,d)\),区间 \([l,r]\) 可从 \(c-1\)\(c\) 之间断开,分解点数量之和累加 \((b-a)(d-c)\)

时间复杂度 \(O(\sum n\log n)\)

代码

参考

posted @ 2025-05-28 07:26  Hstry  阅读(3)  评论(0)    收藏  举报