1112 div1
\(C\) 忘记了用连通块 刻画连续段 ,没想到点边容斥。
\(F\) 中 \(i \in 0,2\^x-1,popcount_k(i)\) 构成的字符串具有倍增的递推关系。
A. Rank Subsequence
给定长度为 \(n\) 的序列 \(a\)。其中第 \(i\) 个元素在子序列中时,满足子序列中在其之前的元素个数不属于 \(l_i,r_i\),子序列中在其之后的元素个数不属于 \(u_i,v_i\)。求最长子序列长度。
\(1 \le \sum n \le 5 \times 10^3,2s,256MB\)。
1
定义 \(f_{i,j}\) 表示考虑前 \(i\) 个元素子序列长度为 \(j\) 是否可行。
发现无法转移,因为不知道后面有多少元素。所以从大到小枚举子序列长度 \(len\),然后再 \(dp\)。
时间复杂度 \(O(n^3)\)。
2
套路地,考虑转 \(01\) 为最值 。具体地,注意到 \(f_i\) 中有值部分是一个前缀 ,所以改变状态,定义 \(f_i\) 表示有值前缀的右端点。状态优化成 \(O(n)\)。
注意到只有 \(f_i\) 处的转移有效,所以转移也优化成 \(O(n)\)。
时间复杂度 \(O(n^2)\)。
B. Permutation Cuts
对一个 \(n\) 阶排列 \(p\),\(\forall i \in 1,n-1,a_i = \min(\max_{j \le i}\{p_j\},\max_{j \ge i+1}\{p_j\})\)。
现在给定 \(a\),求有多少种合法的 \(n\) 阶排列 \(p\)。
\(2 \le \sum n \le 10^6,4s,256MB\)。
1
定义 \(pm_i = \max_{j \le i}\{p_j\},sm_i = \max_{j \ge i}\{p_j\}\)。
考察一个 \(a_i\) 对 \(p\) 的限制。相当于 \(sm_{i+1} \gt pm_i = a_i\) 或者 \(pm_i \gt sm_{i+1} = a_i\)。
考察 \(a_i = v\) 的 \(i\) 构成的集合 \(g_1,g_2,\cdots,g_n\)。
当 \(v\) 放在 \(g_i+1,g_{i+1}\) 时,你发现 \(g_i\) 要求 \(pm_{g_i} \gt v\),但是 \(g_{i+1}\) 要求 \(pm_{g_{i+1}} = v\),矛盾。
所以 \(v\) 只能位于 \(1,g_1\) 或者 \(g_n+1,n\)。以 \(v\) 在 \(1,g_1\) 为例,发现限制最强的是 \(g_n\),即要求 \(sm_{g_n+1} \gt pm_{g_n} = v\)。