2024.4 做题记录

4.7

CF1648D

dpidp_i 为从 (1,1)(1,1)(2,i)(2,i) 的最小代价。答案为 maxdpi+s3ns3i1\max dp_i+s3_n-s3_{i-1}

dpi=max(maxlxidplx1+s2is2lx1wx,maxlxjis1j+s2is2j1wx)dp_i=max(\max_{l_x\le i} dp_{l_x-1}+s2_i-s2_{l_x-1}-w_x,\max_{l_x\le j\le i} s1_j+s2_i-s2_{j-1}-w_x)

前面线段树维护 dp 值,按转移顺序区间 max,单点查。后面从后往前枚举 ii,不断加入区间,维护 maxxya(x)+b(y)\max_{x\le y} a(x)+b(y)。另一个线段树分别维护 maxa,maxb,maxvmaxa,maxb,maxv

CF1949F

不合法情况要么完全包含要么不交,建立树形结构。按 kik_i 大小从小到大排序。实时记录每个爱好 jj 对应的最后的人 fjf_j。枚举 ii 的每个爱好 jj,如果最后不合法意味着每个 fjf_j 的爱好都被 ii 完全包含,否则找到一组解。如果最后不合法,所有 fjf_j 的爱好数之和为 kik_i

4.16

CF1951F

对于 i<ji<j,如果 pip_i>p_j$ ,无论顺序逆序对贡献为 11;否则一个逆序对贡献为 22,顺序对贡献为 00。构造一些位置上的逆序对数为 kinv(p)2\frac{k−inv(p)}{2}

abc348g

有决策单调性,主席树上二分。

4.18

CF1542E2

枚举前 i1i-1 位相同,pi=xp_i=xqi=yq_i=y。逆序对数的差异只与后 ni1n-i-1 的排列有关。dpi,jdp_{i,j} 表示 ii 个数有 jj 个逆序对。

ans=i=0n1Anix=1ni1y=x+1ni1j=0n2k=0j+xy1dpni1,j×dpni1,kans=\sum_{i=0}^{n-1} A_n^i \sum_{x=1}^{n-i-1}\sum_{y=x+1}^{n-i-1} \sum_{j=0}^{n^2}\sum_{k=0}^{j+x-y-1} dp_{n-i-1,j}\times dp_{n-i-1,k}

fj=dpkf_j=\sum dp_k

ans=i=0n1Anij=0n2dpni1,jx=1ni1y=x+1ni1fj+xy1ans=\sum_{i=0}^{n-1} A_n^i \sum_{j=0}^{n^2}dp_{n-i-1,j}\sum_{x=1}^{n-i-1}\sum_{y=x+1}^{n-i-1} f_{j+x-y-1}

gj=fkg_j=\sum f_k

ans=i=0n1Anij=0n2dpni1,j×(gj2×(ni1)x=1ni1gj+xn+i2)ans=\sum_{i=0}^{n-1} A_n^i \sum_{j=0}^{n^2}dp_{n-i-1,j}\times(g_{j-2}\times(n-i-1)-\sum_{x=1}^{n-i-1}g_{j+x-n+i-2})

hj=gkh_j=\sum g_k

ans=i=0n1Anij=0n2dpni1,j×(gj2×(ni1)hj2+hjn+i2)ans=\sum_{i=0}^{n-1} A_n^i \sum_{j=0}^{n^2}dp_{n-i-1,j}\times(g_{j-2}\times(n-i-1)-h_{j-2}+h_{j-n+i-2})

abc349g

最直接的就是并查集倍增将两段区间并起来。

可以用类似马拉车的思路得到一个贪心算法。枚举 ii,用 bani,jban_{i,j} 记录 ii 不能是 jj,维护 rr 表示当前已知 b1brb_1\dotsb b_r。如果 i+airi+a_i\ge r 就把 rr 更新到 i+aii+a_i,否则什么也不做。最后在 hash 判断所有 aia_i 是不是都满足条件。

4.19

P3380

线段树套 FHQ,查询排名为 kk 时二分再查询 midmid 的排名,复杂度 O(nlog3n)O(n\log^3 n)

权值线段树套 FHQ,FHQ 维护位置,查询排名为 kk 时线段树上二分,复杂度 O(nlog2n)O(n\log^2 n)

P7831

拓扑排序转移。当当前是环是拆开 cc 最大的边。

CF1778E

按 dfn 序,前缀线性基或合并前后缀线性基。

arc173e

观察到:只能选偶数个,且当 n=4k+2,k>0n=4k+2,k>0 时不能全选。

线性基选偶数个数:插入 aia1a_i\oplus a_1

4.23

P4839

猫树分治,维护 [l,mid][l,mid] 的前缀线性基和 (mid+1,r](mid+1,r] 的后缀线性基。在 [ql,qr][ql,qr] 跨越 midmid 时合并。复杂度 O(nlog2n)O(nlog^2n)

P5607

维护差分数组。区间 al,,ra_{l,\dotsb,r} 的线性基等价于 ala_lbl+1,,rb_{l+1,\dotsb,r} 的线性基。

P10282

dpi,jdpk,ldp_{i,j}\to dp_{k,l}。对 i,ji,j 往后的转移按平均值从小到大,一边前缀和一边双指针。

4.25

P6134

如果删去边 (u,v)(u,v)uuvv 的路径依然存在,那就删去。bitset 维护可达性。

P3733

先找出最小生成树,线段树分治其他的边,套上线性基维护每个环的最大异或值,见 [WC2011] 最大XOR和路径

CF938G

P3733 加强。不一定存在一直存在的生成树。线段树分治。记录每个点的父亲和到父亲的边权。对边 (u,v)(u,v),如果 u,vu,v 在同一个联通块,加入线性基;否则 fd(u)fd(u)fd(v)fd(v)wdis(u,fd(u))dis(v,fd(v))w\oplus dis(u,fd(u))\oplus dis(v,fd(v))

4.26

CF875F

连二选一的两个点,最多允许存在基环树,求最大生成基环树。

CF1666K

每个点拆为 ai,bia_i,b_i ,最小割,sais\to a_i 表示 iAi\in A,否则 iAi\notin Asbis\to b_i 表示 iBi\in B,否则 iBi\notin B。00 或 11 表示 i\inC

P10371

每个数维护 li,0/1,ri,0/1l_{i,0/1} ,r_{i,0/1} 表示左右第一个、第二个大于 aia_i 的位置。分类讨论 p=l,rp=l,rl<p<rl<p<r

4.28

P7497

线段树维护区间未封个数,未封之和,封了的和,封的次数。封过的区间不参与上传下放,解封时从下面上传。

4.30

agc033d

$dp_{i,j,k,l} 的答案,复杂度 O(n5)O(n^5)

注意到答案小于 lognm\log nm。交换维度。dpans,i,j,ldp_{ans,i,j,l} 表示答案为 ansans(i,j)(i,j)(dpans,i,j,l,l)(dp_{ans,i,j,l},l) 最大。

dpans,i,j,l=max(dpans1,i,j,l,dpans1,dpans1,i,j,l+1,j,l,max(min(dpans1,i,j,k,dpans1,i,k+1,l)))dp_{ans,i,j,l}=\max(dp_{ans−1,i,j,l} ,dp_{ans−1,dp_{ans−1,i,j,l} +1,j,l},\max(\min(dp_{ans−1,i,j,k} ,dp_{ans−1,i,k+1,l})))

kk 维有单调性,双指针。

P7864

结论:一个点存在两个叶子则必胜。

CF1091H

只与和中间点的距离有关,2n2n 个 sg 值亦或起来。

发现 sg 值不大,记 nxtj,inxt_{j,i}ii 的后继有 sg 值为 jj 的。预处理素数,bitset 转移。