做题记录 25.8.13
\(\textcolor{blue}\odot\) CF1585F Non-equal Neighbours
令 \(F(k)\) 表示钦定 \(k\) 组 \(b_i=b_{i+1}\) 的贡献,则答案为 \(\sum_{k=0}^{n-1} (-1)^k F(k)\),相当于将 \(n\) 个数划分为 \(n-k\) 段,每段的贡献为段内最小值,总贡献为每段的贡献之积
令 \(f_{i,j}\) 表示 \(1\sim i\) 划分为 \(j\) 段的贡献,则答案为 \(\sum_{k=0}^{n-1} (-1)^k f_{n,n-k}\),转移为 \(f_{i,j}=\sum_{k=0}^{i-1} f_{k,j-1} \min_{l=k+1}^i a_l\)
发现 \(j\) 只有奇偶性有用,因此第二维只保留奇偶性,答案变为 \(f_{n,n\bmod 2}-f_{n,(n-1)\bmod 2}\),转移为 \(f_{i,j}=\sum_{k=0}^{i-1} f_{k,j\oplus 1} \min_{l=k+1}^i a_l\)
暴力实现为 \(O(n^2)\) 的
对于一个 \(i\),求出 \(p_i\) 表示 \(i\) 以前第一个 \(<a_i\) 的位置,则
前缀和优化容易做到 \(O(n)\)
\(\textcolor{blue}\odot\) CF1585E Frequency Queries
离线,树上前缀和,转化为 \(O(n)\) 次加入、删除值,\(O(q)\) 次查询出现次数少于给定值的值的数量,及查询任意一种出现次数排名为给定值的值
线段树配合 set 即可,时间复杂度 \(O((n+q)\log n)\)
注意常数
\(\textcolor{blue}\odot\) CF1584F Strange LCS
令 \(f_{c,s}\) 表示第一个字符为 \(c\),\(n\) 个字符串中 \(c\) 选择的位置用 \(s\) 表示,其中 \(s\) 的第 \(i\) 位为 \(0\) 表示第 \(i\) 个字符串中选择了第一个 \(c\),为 \(1\) 表示第 \(i\) 个字符串中选择了第二个 \(c\),该情况下能得到的 \(\text{LCS}\) 的最大值
转移则枚举下一个字符 \(c'\),贪心地确定下一步的 \(s'\),记忆化搜索即可
时间复杂度 \(O(\sum n|\sum|^22^n)\),其中 \(|\sum|=52\)

浙公网安备 33010602011771号