2026.9 砖头鸡肋

CF2258F Plus Minus Tree
神秘题。
考虑把所有零权点的权值设为 \(1\),再把一些点改成 \(-1\)。
注意到 \(|x-2|-|x|=\left\{\begin{matrix}-2&x>1\\0&x=1\\2&x<1\end{matrix}\right.\)
设 \(g_u=[S_u<1]-[S_u>1]\),\(f_u\) 为 \(u\) 到根的路径上 \(g\) 的和。
你发现操作点 \(u\) 的代价是 \(2\times f_u\),每次选 \(f_u\) 最小的操作就对了。
你发现 \(g_u\) 最多改变 \(O(1)\) 次,每一次改变相当于子树加,随便维护就做完了。
CF2125F Timofey and Docker
本质上是有一个集合 \(S\),需要把出现次数改为 \(s\) 中的一个数,求最小修改次数。
设 \(s\) 原来有 \(x\) 和 Docker,\(y\) 为 \(S\) 中小于等于 \(x\) 的最大数,那么答案至多为 \(x-y\)。
设 \(t\) 为 \(S\) 中大于 \(x\) 的最小数,要求的就是把出现次数改为 \(t\) 的最小修改次数。
设 \(f(x)\) 为把出现次数改为 \(x\) 的最小操作次数,你发现这是一个下凸包,直接 wqs 二分即可。
洛谷P16160 [ICPC 2016 NAIPC] Jewel Thief
你发现物品都很小,考虑把物品按大小分类。
对同一大小的物品做 01 背包,也就是从大到小排序后前缀和,你发现它是上凸的。
回到原问题,设现在要把大小为 \(w\) 的物品合并进去。
把背包中的所有位置按模 \(w\) 的余数分类,问题等价于有两个序列 \(f,g\),其中 \(g\) 上凸,要做 \(f_i\gets\max_{j}\{f_{j}+g_{i-j}\}\)。
你发现这个东西满足四边形不等式,决策单调性优化一下就做完了。
CF2238E Cake Trial
对于一个填完的序列和一个区间,他的答案是全局 \(\texttt{F}\) 个数减区间 \(\texttt{F}\) 个数加区间 \(\texttt{T}\) 个数。
本质上是最大化区间 \(\texttt{F}\) 个数减区间 \(\texttt{T}\) 个数。也就是把 \(\texttt{F}\) 看成 \(1\),\(\texttt{T}\) 看成 \(-1\) 时的最大子段和。
考虑最大子段和咋求。维护一个变量 \(s\),从前往后扫,扫到 \(i\) 就令 \(s\gets\max(0,s+a_i)\),答案是所有时刻的 \(s\) 最大值。
考虑枚举 \(s\) 的上界,然后 \(O(n^2)\) dp 求出 \(\texttt{F}\) 个数的最大值即可。
CF2236F2 Elections in Saransk (hard version)
显然每个质因数都是独立的,变成这个问题:
有一个序列 \(a_i\) 和一个 \(t\),要计数序列 \(b_i\) 使得 \(b_i\le a_i\) 且 \(\sum_{i}b_i-\max_{i}b_i=t\)。
你发现 \(a\) 的值域超级小,直接枚举最大值然后做背包即可。
CF2237F Paint the Array
考虑一个序列啥时候合法。
把一个差分为 \(1\) 的极长区间称为段,两个相邻的段至少满足左边的段结尾是 \(m\) 和右边的段开头为 \(1\) 中的一个。
设 \(f_{i,j}\) 表示只考虑 \([1,i]\) 且 \(a_i=j\) 的答案,直接 dp 是 \(O(n^2)\) 的。
你发现 \(f_{i,j}\) 会从 \(f_{i-1,j-1},f_{i-1,1},f_{i-1,m}\) 转移过来,其中 \(f_{i-1,j-1}\) 比较神秘。
直接令 \(a_i\gets a_i-i\),上线段树就做完了。
ABC474F Increment All Divisors
设操作完后都是 \(M\),\(i\) 的操作次数为 \(b_i\),显然有 \(M-a_i=\sum_{i\mid k}b_k\)。
莫比乌斯反演得 \(b_i=\sum_{i\mid k}\mu(\frac{k}{i})(M-a_k)=(\sum_{i\mid k}\mu(\frac{k}{i}))\times M-\sum_{i\mid k}\mu(\frac{k}{i})a_k\)。
显然式子中 \(\sum_{i\mid k}\mu(\frac{k}{i})a_k\) 与 \(M\) 无关,可以直接求出来,所以 \(b_i\) 是关于 \(M\) 的一次函数。
合法条件即为所有的 \(b_i\ge 0\) 且 \(M\ge \max_{i=1}^{n}a_i\)。
对于 \(b_i\ge 0\) 的条件,本质上是若干个形如 \((-\infty,x]\),\([x,+\infty)\) 的区间取交,交集区间即为 \(M\) 的取值范围.
另一个条件很好满足,不再赘述。
总操作次数是 \(\sum_{i=1}^{n}b_i\),也是一个关于 \(M\) 的一次函数,最小值一定在取值范围的左端点或右端点取到。
ARC227E Shift and XOR Switches
这题神了。
这个东西过于抽象,考虑构造按钮可重集 \(S\) 与序列的双射。
注意到最后的 \(B\) 就是 \(\prod_{i\in S}(1+x^i)\bmod 2\) 取前 \(n\) 项系数。
设 \(B\) 中非 \(0\) 次的最低次项为 \(x^k\),那么一定有 \(k\in S\),把那个多项式除掉 \(1+x^k\) 后继续递归就能还原出 \(S\)。
这对吗?你发现 \((x+1)^2\equiv x^2+1\pmod 2\),也就是说按两次 \(x\) 等价于按一次 \(2x\),而那个映射就不是双射。
你发现不断把 \(S\) 中相同的数合并直到变成不可重集,此时的 \(S\) 和序列一一对应。
把一个数不断除以 \(2\) 直到变成奇数,将这个奇数称为原数的弹球。把所有数按照弹球分组,显然不同组之间没有影响,每个组的序列种数的乘积就是答案。
组内的问题相当于所有的按钮都是 \(2\) 的幂次,合并可以看做加法进位,故序列与按钮的和一一对应,直接 bitset 求出所有可能的和。
可以发现按钮很多,直接做太慢。若一个数出现了大于 \(2\) 次,就不断合并直到只出现至多 \(2\) 次即可。
CF2253F 4-beauty
集合 \(A=\{a,a+d,a+2d,a+3d\}\) 的可整除性特征为 \([a\mid a+d]+[a\mid a+2d]+[a\mid a+3d]+[a+d\mid a+3d]\)。
注意到可整出性特征最大时一定有 \(d=a\),即 \(A=\{a,2a,3a,4a\}\),也就是说只要把 \(\{1,2,\ldots,n\}\) 删到不同时存在 \(a,2a,3a,4a\) 即可。
经典 trick,对于一个不含 \(2\)、\(3\) 因子的数 \(a\),构造如下网格:

\[\begin{matrix}a&2a&\ldots&2^xa\\3a&6a&\ldots&2^x\times3a\\\vdots&\vdots&\ddots&\vdots\\3^ya&2\times3^ya&\ldots&2^x\times3^ya\end{matrix} \]

上面那个条件就是 \((x,y),(x+1,y),(x+2,y),(x,y+1)\) 至少删一个,直接状压 dp 就做完了。
考虑时间复杂度。设第一行长为 \(L\),则第一行的时间复杂度为 \(O(2^LL)\),每往下一行就减掉 \(\log_2 3\),也就是 \(O(\frac{2^LL}{3^y})\),求和得 \(O(\sum_{i=0}^{+\infty}\frac{2^LL}{3^i})=O(2^LL)\)。
显然 \(2^LL=\frac{n}{a}\log_2\frac{n}{a}\),总时间复杂度为 \(O(\sum_{i=1}^{n}\frac{n}{i}\log_2\frac{n}{i})=O(n\log_2 n)\)。
CF2252E Generational Triplets
显然 \(a+c=2b,a\oplus c=b\),又有 \(a+c=a\oplus c+2(a\&c)\),则有 \(2(a\&c)=a\oplus c\)。
你发现这个条件是若 \(a,c\) 第 \(i\) 位相同,那么第 \(i+1\) 位不同,直接对着这个条件数位 dp。
我不会数位 dp,那咋办?
把 \(0\) 加到范围内,然后用类似线段树的做法把 \([0,n]\) 拆成若干个区间,这样每个区间都满足区间内的数最高若干位相同,低位任意填。
枚举 \(a,c\) 都在哪个区间,然后暴力 dp,时间是三 \(\log\)。
洛谷P16962 [SCCPC 2026] 交换余生
我怎么青提都不会做/ll
给所有数都除以全局 \(\gcd\),显然这个操作不会影响答案。
设 \(p_i\) 为前缀 \(\gcd\),\(s_i\) 为后缀 \(\gcd\),你发现对应的 \(b\) 不合法当且仅当 \(\exists i\in[1,n),p_i=s_{i+1}=1\)。
为啥呢?因为若不等于一,那么全局 \(\gcd\) 就没除完。
选两个质数 \(P_1,P_2\),你发现把所有 \(P_1\) 的倍数丢前面,\(P_2\) 的倍数丢后面肯定不劣,排不出来当且仅当同时不是 \(P_1,P_2\) 倍数的数超过一个。
考虑怎么找质数。你发现这俩质数至少有一个是 \(\operatorname{lcm}(a_1,a_2)\) 的质因子。
枚举这个质数,令它为 \(P_1\),考虑怎么找 \(P_2\)。同理,随便取两个不是 \(P_1\) 倍数的数,他们 \(\operatorname{lcm}\) 的质因子一定有 \(P_2\)。
枚举 \(P_2\),\(O(n)\) 扫一遍判合法即可。
CF1845E Boxes and Balls
?????????????????????????????????????????????
设最开始有 \(m\) 个小球,位置为 \(b_1<b_2<\ldots<b_m\),最后的位置为 \(p_1<p_2<\ldots<p_m\)。
总操作次数即为 \(\sum_{i=1}^{m}|p_i-b_i|\)。这里钦定了小球只往一个方向走,来回走在统计答案时考虑。
直接 dp。设 \(f_{i,j,k}\) 表示前 \(i\) 个位置填了 \(j\) 个小球,操作次数为 \(k\) 的方案,枚举下一位填不填即可。
设 \(g(i,p)\) 表示位置序列为 \(p\) 的方案里跨过 \(i+\frac{1}{2}\) 的小球数,注意到 \(\max g(i,p)\) 是 \(O(\sqrt{k})\) 级别。
这是咋注意到的?显然 \(\sum_{i=1}^{n-1}g(i,p)\le k\),而由于一个位置最多放一个小球,所以 \(|g(i,p)-g(i+1,p)|\le 1\),等差数列求和就能推出上界。
然后 dp 就是平方根号的。????????????????????
CF1149D Abandoning Roads
这也太难了。
把边权为 \(a\) 的边称为杨桃,边权为 \(b\) 的边称为百香,连通块指断掉所有百香后的连通块。
对于一条连通块内的路径,你发现它只要不成环,就一定在某棵 MST 内。
同理,对于跨块路径,只要缩连通块后不成环,就一定在某棵 MST 内。
直接从 \(1\) 开始跑 Dijkstra,跑的时候记录下经过哪些连通块即可。
对于大小至多为 \(3\) 的连通块,要跑出去再跑回来至少要经过两条百香,而在内部走只需经过至多两条杨桃,而 \(2b>2a\),所以不用记这些连通块。
故要记录的连通块最多 \(\frac{n}{4}\) 个,直接状压就做完了。
CF2245F Familiar?
\(\sum a_i>n\) 时答案为 \(0\),判掉。
设 \(P\) 为 mistery(p) 的返回值,你发现 \(P_i\) 就是对 \(p\) 建小根笛卡尔树后 \(i\) 左子树的最长右链长度。
直接区间 dp。设 \(f_{l,r,k}\) 为考虑 \([l,r]\),子树内最长右链长度为 \(k\) 的方案数。这里令 \(f_{i+1,i,k}=[k=0]\)。
设子树的根为 \(i\),则贡献为 \(\binom{r-l}{i-l}f_{i+1,r,k-1}\times\left\{\begin{matrix}\sum_{j=1}^{i-l}f_{l,i-1,j}&a_i=-1\\f_{l,i-1,a_i}&a_i\ne -1\end{matrix}\right.\)
你发现右边还有一个求和。设 \(g_{l,r}=\sum_{i=1}^{r-l+1}f_{l,r,i}\),则:

\[f_{l,r,k}=\sum_{i=l}^{r}\binom{r-l}{i-l}f_{i+1,r,k-1}\times\left\{\begin{matrix}g_{l,i-1}&a_i=-1\\f_{l,i-1,a_i}&a_i\ne -1\end{matrix}\right. \]

\[g_{l,r}=\sum_{i=l}^{r}\binom{r-l}{i-l}g_{i+1,r}\times\left\{\begin{matrix}g_{l,i-1}&a_i=-1\\f_{l,i-1,a_i}&a_i\ne -1\end{matrix}\right. \]

看起来无法优化了,那咋办?
若 \(a_{r+1}=-1\),那么 \(f_{l,r,k}\) 都不用算,只用算 \(g_{l,r}\)。算一次是 \(O(n)\),这一部分总复杂度是 \(O(n^3)\)。
若 \(a_{r+1}\ne -1\),那么只有 \(k\in[1,a_{r+1}]\) 时有用。\(\sum a_i\le n\),所以这样的状态只有 \(O(n^2)\) 个,这一部分总复杂度是 \(O(n^3)\)。
CF2247F Paths on a Grid
对于集合 \(S\),它好的充要条件为 \(\forall i,j\in S\),经过 \(i\) 和经过 \(j\) 的路径集合相同。
!?哈希?!
双模哈希,\(10^9+7\) 和 \(998244353\) 直接过了。
CF2248G No Balance Left
先用 bitset 搞出每次消费能用多少。具体是从小往大扫,若当前 \(i\) 能买到,就做一次 f|=(f<<i)。
设 \(d_i\) 表示单次消费 \(i\) 时返了多少,显然 \(i=d_i\) 的没用,直接丢掉。设 \(T\) 为满足 \(T<d_T\) 的最小数。
对于 \(i<T\) 的部分,就是一个普通的背包,直接 bitset。
你发现它是 \(ans_i=\bigvee_{j\le i}[\exists k\le i,i=j-d_k+k]ans_j\),本质上是 ans|=(ans>>d[k]<<k)。
转移顺序就是从小到大枚举 \(k\)。你发现这里只是 01 背包,所以还要在做一遍完全背包。
对于 \(i\ge T\) 的部分,你发现因为 \(i>d_i\),所以他的余额可以一直变大。
设它单次消费可以让余额加上 \(\Delta\),\(A\) 为所有正 \(\Delta\) 集合,\(B\) 为所有负 \(\Delta\) 集合(取绝对值),\(g_{A}=\gcd(A)\),\(g_{B}=\gcd(B)\),\(G=\gcd(g_A,g_B)\)。
根据小凯的疑惑,足够大的 \(g_A\) 倍数一定在 \(A\) 里,足够大的 \(g_B\) 倍数一定在 \(B\) 里,所以只要余额是 \(G\) 的倍数就能搞到 \(0\)。
显然 \(G=\gcd(|i-r_i|,\sum_{i}x_ic_i-b_m)=\gcd(|i-r_i|,c_i,b_m)\)。
ARC227F Erase and Raise
我咋这都不会??!?!?!
设最终序列为 \(a_1,a_2,\ldots,a_m\),考虑它啥时候合法。
显然 \(a_i\) 两两不同,且 \(2\mid n-m\)。设初始长度不限时搞出这个序列至少需操作 \(t\) 次,有结论是合法当且仅当 \(m+2t\le n\) 且满足前面两个条件。
为啥?操作 \(t\) 次删了 \(2t\) 个数,故初始长度至少为 \(m+2t\),而可以操作相邻两个 \(0\) 来删数,就是 \(\le\)。
不妨令 \(a_0=a_{m+1}=0\),有结论 \(2t=\sum_{i=0}^{m}|a_i-a_{i+1}|\)。
为啥?你发现 \(|a_i,a_{i+1}|\) 是某个端点在 \(i+\frac{1}{2}\) 的最少操作数,而这一堆不等式可以同时取等(?不会证/ll
连续段 dp,从小到大插数。把 \(|a_i-a_{i+1}|\) 看作折线长度,设 \(f_{i,j}\) 表示目前插入的元素个数加折线长度为 \(i\),包括两端的 \(0\) 有 \(j\) 段的方案数。
考虑边界(是否插入 \(0\)),有 \(f_{0,2}=f_{1,1}=f_{1,3}=1,f_{1,2}=2\)。
考虑转移。显然每次往上扫每段边界的折线长度都会加一,也就是变成 \(t=i+2(j-1)\)。
若不插入当前的数,有转移 \(f_{i,j}\to f_{t,j}\)。
若插入当前的数,独立成段,有转移 \((j-1)f_{i,j}\to f_{t+1,j+1}\)。
若插入当前的数,和左右恰好有一边和旁边的段连上,有转移 \(2(j-1)f_{i,j}\to f_{t+1,j}\)。
若插入当前的数,和左右两边的段都连上,有转移 \((j-1)f_{i,j}\to f_{t+1,j-1}\)。
你发现 \(j\) 的上界是 \(O(\sqrt n)\) 的,直接做就完了,答案是 \(\sum_{0\le i\le n,2\mid n-i}f_{i,0}\),注意有没有加上空集。
洛谷P13614 [IOI 2018] highway 高速公路收费
把边权为 \(A\) 的边称为眩晕,边权为 \(B\) 的边称为逆旅,边都是眩晕时的最短路称为最最短路。
考虑一个简化问题:给一棵树,且已知 \(S\) 为树根,求 \(T\)。
二分一个 bfs 序前缀,前缀里的点到根的边都是眩晕,其他边是逆旅。若 \(T\) 的最短路等于最最短路,说明它在这个前缀里。
对于一般图,考虑二分出一个前缀 \([1,p]\) 使得只保留编号在 \([1,p]\) 内的边后 \(S,T\) 的最最短路不变,且 \(p\) 最小。
显然 \((p,m]\) 的边可以丢掉。设边 \(p\) 为 \((x,y)\),\(dis(x,y)\) 为 \(x,y\) 在新图上的最最短路。
求出两个集合 \(S=\{u\mid dis(u,x)<dis(u,y)\},T=\{u\mid dis(u,x)>dis(u,y)\}\),显然 \(s,t\) 一个在 \(S\) 里,一个在 \(T\) 里,不妨令 \(s\in S,t\in T\)。
对于 \(S\),以 \(x\) 为根求出一棵 bfs 树,在这棵树上跑上面那个东西即可,\(T\) 同理。
CF2248F Matrix Elimination
条件转化为 \(-3v_{x,y}+\sum_{i=1}^{n}v_{i,y}+\sum_{i=1}^{m}v_{x,i}\le 0\),设这个式子为 \(a_{x,y}\)。
一次操作中,若 \((x,y)\) 没被操作,则 \(a_{x,y}\) 最多减去 \(\max(n-1,m-1)\)。若 \((x,y)\) 被操作,则 \(a_{x,y}\) 最多减去 \(n+m-3\)。
你发现当全局操作不劣时有 \(n+m-3\ge\max(n-1,m-1)\),即 \(\min(n,m)\ge 2\),此时直接算就做完了,剩下的情况中矩阵是一个序列状物。
不妨令 \(n=1\)。设 \(b_{i}=-2v_{1,i}+\sum_{j=1}^{m}v_{1,j}\),合法条件为 \(b_i\le 0\)。
你发现一次全局操作会让所有 \(b\) 减去 \(m-2\),一次 \([1,m)\) 或 \((1,m]\) 会让单点减去 \(m-1\),别的减去 \(m-3\),其它操作没全局优。
你发现一次 \([1,m)\) 和一次 \((1,m]\) 不如两次全局,不妨设只会操作 \((1,m]\),最后再倒过来做一遍。
设 \(A=a_{1,1},B\) 为 \((1,m]\) 中的第 \(k-1\) 小,共操作 \(x\) 次全局和 \(y\) 次 \((1,m]\)。
你发现合法时有 \(\left\{\begin{matrix}A\le(m-2)x+(m-1)y\\B\le(m-2)x+(m-3)y.\end{matrix}\right.\) 设 \(z=x+y\),则 \(\left\{\begin{matrix}A\le(m-2)z+y\\B\le(m-2)z-y\\0\le y\le z.\end{matrix}\right.\)。
解得 \(z\ge\max\left(\frac{A+B}{2(m-2)}\frac{A}{m-1},\frac{B}{m-2}\right),\max(0,A-(m-2)z)\le y\le\min(z,(m-2)z-B)\),\(y\) 的取值范围是判无解用的。
qoj17962 Exam
我咋这都不会???????
你发现路径长度能到 \(39\),无法爆搜。注意到路径一定经过左下到右上的对角线,考虑 meet in middle。
设状态 \((x,y)\) 表示当前路径最大子段和为 \(x\),最大前(后)缀和为 \(y\),合并即为 \(\max(x_1,x_2,y_1+y_2)=K\)。
把等于容斥成 \(\le K\),排序后双指针即可。
CF2252F Spectral Components
对于一个点集,把包含它所有点的最小联通块称为实树。
对于某种颜色,你发现你选出来的点一定在这个颜色的点构成的实树上。
当 \(k=1\) 时,显然选的点是实树的重心,也就是虚树的重心。
当 \(k>1\) 时,你猜测它是先选重心,然后每次选最优的点往外扩展一个。
实现时,最优的点等价于最优的边,随便维护一下就行。
CF2262B Culling Game
什么神人题。
删人可以看成把等级清零,如果 \(1\) 被删了就把答案减 \(1\)。
对于第 \(i\) 个人,设从 \(i\) 开始往后打最多打到 \(p_i\)。这里令 \(a_{n+1}=+\infty\)。
注意到对任意 \(1\le i<j\le n\),都有 \([i,p_i]\) 和 \([j,p_j]\) 要么包含要么不交,即 \(p_i<j\) 或 \(p_i\ge p_j\)
为啥?考虑反证。根据 \(p\) 的定义有 \(\sum_{k=i}^{p_i}a_k<a_{p+1}\),\(\sum_{k=j}^{p_i}a_k\ge a_{p+1}\),而 \(\sum_{k=i}^{p_i}a_k\ge\sum_{k=j}^{p_i}a_k\),前后矛盾。
从 \(1\) 开始跳,设当前跳到 \(u\),把 \([u,p_u]\) 划分为一个段,然后令 \(u\gets p_u+1\),答案即为划分的段数减一。
设某次删掉了 \(u\),以 \(v\) 开头的段覆盖了 \(u\),下一个段为 \(w\)。
若 \(u\ne v\):考虑重构 \(v\) 这个段。你发现从 \(v\) 开始往后暴力跳,一定能跳到 \(w\),如果能快速查询 \(p_i\) 就做完了。
若 \(u=v\):类似地,重构 \(v\) 上一个段即可。
如何查询 \(p_i\)?设 \(pr_{i}=\sum_{j=1}^{i}a_j\),\(p_i\) 即为第一个满足 \(a_{p_i+1}-pr_{p_i}>-pr_{i-1}\) 的位置,线段树二分即可。
复杂度为啥是对的?以 \(i\) 开头的段被删掉当且仅当某次把 \(i\) 删了,而在那之后 \(a_i=0\),\(i\) 就不会再次成为开头了,也就是说每个位置最多成为一次开头。
CF2152G Query Jungle
显然要求所有怪物点构成的虚树的叶子个数。
有个做法是动态 dp,但我不会。考虑括号序(??????这是人能想出来的吗?)
答案本质上是保留所有怪物点对应的括号后,得到的括号串中 () 的子串数,一次操作为区间换状态。
对一个区间维护选/不选部分的区间内答案,最左/右边的括号是啥就做完了。
洛谷P15534 【MYCOI R1】那猫猫城的集市
你发现操作可逆,考虑差分。
你发现需要对每个物品维护一个点跑到根和根跑到一个点后是啥。
你发现直接可持久化线段树就做完了!
CF1684G Euclid Guess
显然 \(\ge\frac{m}{2}\) 的数构造不出来,直接判掉。你发现 \(\le\frac{m}{3}\) 的数 \(a\) 可以用 \(2a,3a\) 构造出来。
对于一个数 \(a\in(\frac{m}{3},\frac{m}{2})\),显然他会带上另一个数 \(b\in[1,\frac{m}{3}]\) 构造出来。
你发现要构造出这两个数,最小要用 \(2a+b,a+b\),即满足 \(2a+b\le m\)。
设 \(2a+b,a+b\) 最后得到的数是 \(s\),你发现 \(s\) 是 \(a\) 的因子,而且用 \(2a+s,a+s\) 只会构造出 \(a\) 和 \(s\),这样显然更优。
也就是说 \(a\) 只会带着他的因子构造,连边后直接二分图匹配就做完了!
CF2255E1 What Will Remain at the End? (Easy Version)
考虑线段树。
你发现你需要合并两段区间的最大子段和,直接记录 \((ans,premax,sufmax,ans)\),即区间和、最大前缀和、最大后缀和、最大子段和。
你发现懒标记本质上是记录一段操作对当前区间的影响,而区间内数相同的位置受到的影响是相同的,可以对每种数都记录下。
也就是说,懒标记只需要记录下每种数操作完后是什么、以及对应的最大子段和信息就行了。
洛谷P6940 [ICPC 2017 WF] Visual Python++
在横轴上从右往左扫描线,对于当前扫到的左上角,它一定会匹配没匹配、且能匹配的所有右下角中最上的,有多个就选最左的。
为啥呢?若不选那个点,那么后面要选那个点就会有交。
现在问题是有若干个矩形,要判断是不是只有包含或不交关系。
你发现两个矩形有交且满足贪心策略当且仅当右矩形左下角在左矩形内且右上角不在。
上面的结论没判掉两矩形左边界或下边界重合的情况,修一下即可。
把右上角坐标放在左下角,然后树套树即可。
qoj4861. Lexicographic Comparison
看到字典序,考虑求 LCP 后变成求单点值。
求单点值是在置换环上绕圈,LCP 是最小的 \(i\) 满足 \(i\) 所在环长不是 \(x-y\) 的因子。
所有相同长度的环只关心其中编号最小的点,而环长只有 \(O(\sqrt n)\) 种,可以暴力枚举。
如何维护环呢?考虑操作分块。把块内交换操作影响到的点称为坏点,其他是好点。
对于全是好点的环,可以直接 \(O(n)\) 做一遍。
对于有坏点的环,把它分解为若干条一个坏点后面挂一堆好点的链。
显然操作不会影响链的内部,只影响链之间的连接方式,直接暴力重构就行。
查询直接枚举全是好点的环的环长和有坏点的环,维护一下每个环长的最小点和每个有坏点的坏的最小点。
单点值就记录环长啥样,然后直接查位置。
CF2025F Choose Your Queries
把操作连边,变成一个无向图。
设 \(i\) 的被操作 \(a_i\) 次,答案就是 \(\sum_{i=1}^{n}(a_i\bmod 2)\)。
变成一个黑白染色,初始全是白色,每条边要选一个点反转颜色,求黑点最少个数。
对于一个连通块,在它的 dfs 树上从叶子往上贪心即可。
CF2255E2 What Will Remain at the End? (Hard Version)
首先你要会 Easy Version。
下文把某个位置的某个时间段形成的序列称为时间序列,把一个序列的 \((sum,premax,sufmax,ans)\) 称为信息。
若所有修改都是全局操作要咋办?
显然在第一次赋值前,位置 \(i\) 的取值范围是 \(\{-a_i,0,a_i\}\),可以看成取值范围是 \(\{-1,0,1\}\),最后给最大子段和乘上 \(a_i\)。
你发现 \(a_i<0\) 时取 \(\max\) 操作会爆炸,答案也不对,可以令 \(a_i\gets|a_i|\) 然后维护初始分别为 \(-1,1\) 进行这些操作后的时间序列的信息。
在第一次赋值后,每个位置的值都相同,可以直接维护这些值形成的时间序列的信息。
查询的时候,把第一次赋值前的时间序列的信息求出来,和第一次赋值后的时间序列的信息合并就行。
对于一般情况,你发现懒标记本质上是对当前区间的所有全局操作的信息,和上面差不多,只需要把 \(a\) 替换成这个区间上次下放标记后的序列。
对于合并标记,可以维护进行完懒标记对应的操作后,值是原来的值乘上 \(-1,1\) 还是一个与初始值无关的值,然后做一个类似函数复合的东西。
CF2239C Revival
设 \(f(S,T)\) 为满足 \(i\in S,j\in T,i<j,p_i>p_j\) 的 \((i,j)\) 对数。
考虑倒着推。设现在要求 \(p_r\),前面第一个知道 \(s\) 的位置在 \(l\)。
因为知道了 \(p_{r+1}\sim p_n\) 和 \(p_{l+1}\sim p_{r-1}\),就可以求出 \(S=\{p_x\mid x\in[1,l]\}\cup\{p_r\}\)。

\[\begin{aligned}s_r-s_l=& f([1,l],(l,r))+f((l,r),(l,r))+\sum_{i=1}^{r}[p_i > p_r]\\=& \sum_{i=l+1}^{r-1}\sum_{j\in S}[j>p_i]+f((l,r),(l,r))-\sum_{i=l+1}^{r-1}[p_r>p_i]+\sum_{i=1}^{r}[p_i>p_r]\end{aligned}\]

显然前两项可以直接求,设 \(f(x)=\sum_{i=1}^{r}[p_i>x]-\sum_{i=l+1}^{r-1}[x>p_i]\),显然这个单调,二分即可。
注意到 \(\sum_{j\in S}[j>p_i]=n-p_i-\sum_{j\not\in S}[j>p_i]=n-p_i-\sum_{j=l+1}^{r-1}[p_j>p_i]-\sum_{j=r+1}^{n}[p_j>p_i]\)。
CF2257F2 Beaver's Jumping Track (Hard Version)
显然一个段只关心从段前面的 \(1\sim x\) 个位置跳到最后 \(1\sim x\) 个位置的代价。
合并是一个 \((\min,+)\) 卷积,考虑线段树。
求答案的时候其实单次合并是 \(O(x^2)\) 的,总复杂度是 \(O(nx^3+qx^3\log n)\),不知道为啥能过。
好像有点卡空间,可以写 \(2n\) 空间线段树然后不记录叶子节点的矩阵。
其实就是对于区间 \([l,r]\),把他编号为 \(\lfloor\frac{l+r}{2}\rfloor\)。
洛谷P17286 「IXOI R2」Horizon Blue
看题解发现直接暴力根号重构就做完了,有点难绷。
把修改操作影响到的点称为好点,其他的是坏点。
根号重构,好点超过根号个就重构一下。
容斥一下,一个区间的答案是在重构时的序列上的答案,再把新序列上以好点为最大值的子区间的贡献换掉。
对于重构时的序列上的答案,可以参考 P3246 做到 \(O(n)\) 预处理 \(O(1)\) 查询。
对于以好点为最大值的子区间,只需要对每个好点找到它左右两边大于它且离它最近的位置就行了。
对于这个东西,可以分别算好点和坏点的贡献。好点可以枚举所有好点单调栈,坏点可以在每次修改好点的时候二分一下。
ARC230B Chmax and Chmin
考虑倒过来做,对每个 \(i\) 维护一个 \([l_i,r_i]\) 表示 \(i\) 经过一些操作后会变成 \(b\) 的可能初始值,要求最后 \(a_i\in[l_i,r_i]\)。
若要对 \(i\) 做逆的 chkmx x,必要条件是 \(x\le r_i\)。你发现 \(x<l_i\) 时区间不变,否则令 \(l_i\gets-\infty\)。
类似地,若要对 \(i\) 做逆的 chkmn x,必要条件是 \(x\ge l_i\)。\(x>r_i\) 时区间不变,否则令 \(r_i\gets+\infty\)。
你观察一下 \(2n\) 的次数限制,发现就是一个点改一次左端点改一次右端点。
对于一个区间 \([l,r]\),设 \(x=X_{r-l+1}\)。可以维护一个 \(\sum_{i=l}^{r}[x>r_i]\)。当这个值为 \(0\) 且存在 \(i\in[l,r],l_i\ne-\infty,x\ge l_i\) 时就 chkmx 这个区间。
chkmn 是类似地,然后直接做就没了。
ARC230A Meeting on Tree
有个神秘的转化是,对于一种方案,它的答案是 \(\sum\min(x,y)\),\(x,y\) 表示断掉某条边后两棵树中选的点数。

posted @ 2026-09-03 20:29  天域_awa  阅读(48)  评论(0)    收藏  举报