Atcoder Grand Contest 056 B - Range Argmax
因为一组 \(x\) 可能对应多组 \(p\),考虑怎么让决策唯一化。
我们从大到小依次钦定每个值的位置,即倒着遍历 \(i=n,n-1,\cdots,1\),找到最左端的位置 \(v\) 满足,对于现在还活着的所有区间 \(j\) 满足 \(l_j\le v\le r_j\),都有 \(x_j=v\),令 \(p_j=i\),然后删去所有包含 \(i\) 的区间。显然对于一组合法的 \(\{x_m\}\),我们总能唯一还原出对应的排列 \(p\)。
这样以来,原本对 \(x\) 计数可以转化为对排列 \(p\) 计数。即计算有多少个不同的 \(p\),满足这组 \(p\) 对应的 \(\{x_m\}\) 按照这种方式构造以后还原出来的排列刚好也是 \(p\)。
对于一个合法的排列 \(p\),以区间 \(\max\) 为键值建立笛卡尔树,显然笛卡尔树的形态是唯一的。而对于一棵合法的笛卡尔树,要对应得到合法的 \(p\) 显然只能从根开始按先序遍历依次赋值 \(n,n-1,n-2,\cdots,1\),也就是说合法的笛卡尔树与排列形成双射,因此考虑对笛卡尔树进行 DP。
假设当前考虑到笛卡尔树上的区间 \([l,r]\),我们枚举 \([l,r]\) 中最大值的位置 \(k\),递归处理 \([l,k-1]\) 和 \([k+1,r]\) 的部分。但是根据我们的先决条件,这里的 \(k\) 是所有合法的 \(k\) 中最靠左的,所以对于 \([l,k-1]\) 的取值也自然要有一些限制。这里有一个结论:设 \(k'\) 为 \([l,k-1]\) 最大值的位置,那么 \([l,r]\) 合法的充要条件是,\([l,k-1],[k+1,r]\) 都是合法的,且不能存在一个 \(l\le l_i\le k'\le k\le r_i\le r\)。
必要性:如果不存在 \(l\le l_i\le k'\le k\le r_i\le r\),那么把最大值钦定在 \(k'\) 也是合法的。充分性:如果存在 \(l\le l_i\le k'\le k\le r_i\le r\),那么根据左区间的合法性可知把最大值钦定在 \(k'\) 以左是不合法的,而如果把最大值钦定在 \([k',k)\) 中某个位置,那么有 \(x_i\ne k\),也不合法,这样最左端合法位置就是 \(k\) 了。
这样以来考虑 \(dp_{l,r,k}\) 表示有多少种不同的以 \([l,r]\) 为根的合法的笛卡尔树数量,满足 \([l,r]\) 最大值位置 \(\ge k\)。预处理 \(g_{l,r,k}\) 表示当 \([l,r]\) 最大值位置为 \(k\) 的时候,\([l,k-1]\) 最大值位置最小是多少,这样转移可以做到 \(O(1)\)。
时间复杂度 \(O(n^3)\)。