做题记录 25.7.10
\(\textcolor{blue}\odot\) CF1693C Keshi in Search of AmShZ
令 \(f_u\) 表示 \(u\) 到 \(n\) 的最小代价,显然 \(f_n=0\),答案为 \(f_1\),转移为
使用类似 \(\text{dijkstra}\) 的方法,从小到大跟新 \(f\),类似拓扑排序记录剩余 \(deg\),则 \(\sum_{u\to w}[f_w>f_v]=deg\)(可能存在多个 \(f_v=f_w\) 的,即 \(\sum_{u\to w}[f_w>f_v]\) 可能多算,但一定存在一个 \(f_v=f_w\) 使得式子恰好正确,且不正确的会被 \(\min\) 消去,因此不用考虑)
时间复杂度 \(O(m\log n)\)
\(\textcolor{purple}\odot\) CF1693D Decinc Dividing
区间合法当且仅当区间内不存在离散化后为 \(3\;4\;1\;2\) 或 \(2\;1\;4\;3\) 的子序列,显然具有单调性,令 \(mr_l\) 表示最小的不合法右端点(即最小的 \(r\) 使得 \([l,r]\) 内存在形如 \(3\;4\;1\;2\) 或 \(2\;1\;4\;3\) 的子序列)
只考虑 \(3\;4\;1\;2\) 的情况,对于 \(2\;1\;4\;3\) 的情况,值域翻转后 \(mr\) 取 \(\min\) 即可
预处理 \(pmn_i\) 表示 \(i\) 之前第一个 \(<a_i\) 的位置,\(smx_i\) 表示 \(i\) 之后第一个 \(>a_i\) 的位置
从 \(n\) 到 \(1\) 枚举 \(i\),树状数组 \(F\) 中 \(p\) 位置保存 \(i\sim n\) 中最小的 \(q\) 满足 \([i,q]\) 中存在 \(1\;2\) 且 \(2\) 的值 \(=p\),令 \(pm_s=\{i\mid pmn_i=s\}\),\(sm_s=\{i\mid smx_i=s\}\),则枚举 \(\in pm_i\),\(F_{a_s}\gets s\),然后枚举 \(s\in sm_i\),\(mr_s\gets \min F_{1\sim a_s-1}\),最终对 \(mr\) 做后缀 \(\min\) 和
时间复杂度 \(O(n\log n)\)
存在 \(O(n)\) 解法
\(\textcolor{blue}\odot\) CF1691E Number of Groups
先将区间按右端点从小到大排序,然后依次枚举每个区间,两个栈分别保存两种颜色的区间形成的连续段,每段保存其第一个区间,并查集维护 \(n\) 个区间的连通性
每加入一个区间,若对应栈(即颜色与当前区间不同)顶与当前区间相交,则合并,否则结束并将当前区间作为新连通块加入对应颜色的栈中
时间复杂度 \(O(n\log n)\),瓶颈在于排序,容易做到 \(O(n\alpha(n)+n\log_n V)\)
\(\textcolor{purple}\odot\) CF1689E ANDfinity
当存在 \(a_i=0\) 时,显然操作 \(a_i\gets a_i+1\) 是必要的,因此考虑 \(\forall i,a_i\ne 0\) 的情况,此时至多只需要两次操作
证明:
- 令 \(P\) 为 \(\text{lowbit}(a_i)\) 取到最大值的 \(i\) 的集合
- 显然 \(|P|\ge 1\)
- 当 \(|P|=1\) 时,对应位置减一,显然满足条件
- 当 \(|P|\ge 2\) 时,任取两个,一个加一,一个减一,显然满足条件
因此特判 \(0\) 次操作的情况,枚举一次操作的 \(O(n)\) 种可能,分别 \(O(n\alpha(n)\log V)\) 判定,若都不合法,则按上述方式构造出两次操作的方案
总时间复杂度 \(O(n^2\alpha(n)\log V)\)
\(\textcolor{purple}\odot\) CF1687C Sanae and Giant Robot
令 \(c_i\gets a_i-b_i\),则转化为每次选择一个 \([l,r]\) 满足 \(\sum_{i=l}^r c_i=0\),\(\forall l\le i\le r,c_i\gets 0\),最终令所有 \(c_i\) 都 \(=0\)
令 \(s_i=\sum_{j=1}^i c_j\),则转化为选择区间 \([l,r]\) 满足 \(s_{l-1}=s_r\),\(\forall l\le i\le r,s_i\gets s_{l-1}\),最终令所有 \(s_i\) 都 \(=0\)
显然 \(s_{l-1}=s_r\ne 0\) 时不优,因此进一步转化为选择区间 \([l,r]\) 满足 \(s_{l-1}=s_r=0\),\(\forall l\le i\le r,s_i\gets 0\),最终令所有 \(s_i\) 都 \(=0\)
用 set 保存 \(\ne 0\) 的 \(s\) 的位置,每次取出一个未扩展过的 \(s_i=0\) 的 \(i\),枚举 \(l=i\) 或 \(r=i\) 的区间 \([l,r]\) 并尝试操作
总时间复杂度 \(O(\sum (n+m)\log n)\)
\(\textcolor{purple}\odot\) CF1685C Bring Balance
令 \(h_i\) 为 \(i\) 位置的括号嵌套深度
题目保证 \(h_{2n}=0\),显然 \(\forall i,h_i\ge 0\) 时序列合法,此时操作数为 \(0\)
否则,令 \(p\) 为 \(h\) 的最小值所在位置,反翻转 \([1,p-1]\) 和 \([p+1,2n]\) 一定合法,因此答案上限为 \(2\)
考虑何时答案可以为 \(1\)
可证区间 \([l,r]\) 满足 \(\forall l\le i\le r,h_i\le h_l+h_r\) 时,翻转区间 \([l,r]\) 会使得 \([l,r]\) 内的 \(h\) 都 \(\ge 0\)
令 \(p_0\) 为第一个 \(<0\) 的 \(h_i\) 的位置,\(p_m\) 为最后一个,显然最优情况下取 \(l\) 为 \([0,p_0]\) 中的最大值的位置,\(r\) 为 \([p_m,2n]\) 中的最大值的位置
总时间复杂度 \(O(\sum n)\)

浙公网安备 33010602011771号