做题记录 25.3.20
\(\textcolor{blue}\odot\) CF1984F Reconstruction
令 \(b_0=b_{n+1}=0\),\(s_0=\text P\),\(s_{n+1}=\text S\)
对于每个 \(1\le i\le n+1\),设 \(\sum a_i=sm\)
- 若 \(s_{i-1}=\text P,s_i=\text P\),则要求 \(a_i=b_i-b_{i-1}\in[-m,m]\)
- 若 \(s_{i-1}=\text P,s_i=\text S\),则要求 \(b_i+b_{i-1}=sm\)
- 若 \(s_{i-1}=\text S,s_i=\text P\),则要求 \(b_i+b_{i-1}-sm\in[-2m,2m]\)
- 若 \(s_{i-1}=\text S,s_i=\text S\),则要求 \(a_i=b_{i-1}-b_i\in[-m,m]\)
由于 \(s_0=\text P\),\(s_{n+1}=\text S\),对于给定的 \(s_{1\sim n}\) 一定含有 \(\text {PS}\),即 \(sm\) 一定可以确定
而 \(sm\) 的取值只有 \(b_i+b_{i+1}\;(0\le i\le n)\) 共不超过 \(n+1\) 种(需要去重)
枚举 \(sm\),分别求出方案数(显然 \(sm\) 不同的方案一定不同)
令 \(f_{i,0}\) 表示 \(s_i\) 取 \(\text P\) 的方案数,\(f_{i,1}\) 表示取 \(\text S\) 的方案数,容易 \(O(n)\) \(dp\) 求出一个 \(sm\) 的贡献
时间复杂度 \(O(n^2)\)
\(\textcolor{purple}\odot\) CF1986G2 Permutation Problem (Hard Version)
令 \(a_i=\frac i{\gcd(i,p_i)}\),\(b_i=\frac {p_i}{\gcd(i,p_i)}\),则转化为计算 \(\sum_{1\le i<j\le n}[a_i\mid b_j][b_i\mid a_j]\)
显然
问题转化为求 \(\sum_{i=1}^n\sum_{j=1}^n[a_i\mid b_j][a_j\mid b_i]\)
令 \(B(x)=\{b_i\mid a_i=x\}\),\(A(x)=\{a_i\mid b_i=x\}\)
枚举 \(ai(1\le ai\le n)\),令 \(cnt_{aj}=\sum_{i}[a_i=ai][aj\mid b_i]\)(每计算一个 \(ai\) 时枚举 \(bi\in B(ai)\),然后枚举 \(d(d\mid bi)\),处理完一个 \(ai\) 后清空),枚举 \(bj(ai\mid bj)\),枚举 \(aj(aj\in A(bj))\),答案累加 \(cnt_{aj}\)
可证时间复杂度为 \(O(n\ln n)\)
\(\textcolor{blue}\odot\) CF1983F array-value
二分答案,设值为 \(M\),则转化为查询有多少区间的权值 \(\le M\)
发现若区间 \([l,r]\) 合法则 \([l-1,r]\) 和 \([l,r+1]\) 也合法,因此对于每个右端点求出最大的左端点使得区间合法
设右端点为 \(r\) 时左端点为 \(lp_r\),则 \(lp_r=\max(lp_{r-1},\max_{l\le r,a_l\oplus a_r\le M} l)\),其中后一项可以用字典树维护
时间复杂度 \(O(n\log^2 V)\)

浙公网安备 33010602011771号