ARC 杂碎
ARC 178 B
原问题困难的时候,可以考虑容斥。
ARC 178 C
转换题。原先转换错了(其实是不可做),导致耗时比较久。
首先我们算 \(\sum abs\) 可以先排序,大的减小的,这样可以去掉 \(abs\)。有两种转换方法:
-
\(\sum abs=\sum_{i=1-(n\mod 2)}^{n-1}b_i\times i\),其中要保证 \(b_{i-1}\le b_i\)。这个其实就是我们首尾差,两个减/加次数相同。
-
\(\sum abs=\sum_{i=1}^{n-1}i\cdot b_i\cdot (n-i)\)。这个其实就是我们差分一下,算出 \(\sum abs=\sum c_i\),\(c_i=c_{i-1}+(i-1)\cdot b_i\)。
第二个可以用,因为限制少,我们要最小化 \(\sum b_i\)(而不是 \(\max\)),比较好做。可以发现 \(i(n-i)\) 会比较大,所以直接 \(dp\) 是正确的。复杂度大概 \(\mathcal{O}(n\sqrt{A})\) 左右。
ARC 178 D
第一次(?)独立做出 arc 评分 \(\sim 2500\) 的题,记之。
MEX 我们肯定是从大的往小的删,因为小的先删了肯定不能再删更大的了。然后如果我们要删掉 \(i\),那么 \(0\sim i-1\) 必定是在 \(i\) 的左边或者右边(不能两边都有否则包含 \(i\))。
一个立马想到的思路就是从大往小确定枚举是在左边还是右边,但是发现 \(a\) 要是子序列这个很难搞。所以不如确定下来 \(a\) 再插空填不在 \(a\) 中的,设为 \(b\) 数组。一共有 \(m+1\) 个空隙。
我们可以维护要填一个数 \(b_i\) 的时候我们可以填的空隙。这个不可以填的空隙一定是一个连续的区间。这个是因为不能填的地方就是 \(<b_i\) 的区间,我们必须要在左边或者右边。
设 \(dp_{x,l,r}\) 为确定了 \(b_0\sim b_x\),目前 \(b_{x+1}\) 可以填的区间是 \(l\sim r\) 空隙。那么我们填 \(b_{i+1}\) 的时候,先把 \(a\) 中 \(b_i+1\sim b_{i+1}-1\) 的数至少要用到的区间和 \(l\sim r\) 合并,设为 \([L,R]\)。则 \(dp_{x+1,1\sim L,R}\) 和 \(dp_{x+1,L,R\sim m+1}\) 都要加上 \(dp_{x,l,r}\)。这个可以查分一下再前缀和。
注意 \(b_0=0\) 和 \(b_0\neq 0\) 不同考虑。复杂度 \(\mathcal{O}(m^3)\)。
ARC 183 C
随便记录一下。
设 \(dp_{l,r}\) 为填 \(l\sim r\) 的方案数。填的时候枚举这一段最大值在哪儿。设在 \(p\),则 \(dp_{l,r}\leftarrow dp_{l,r}+dp_{l,p-1}\times dp_{p+1,r}\times \binom{r-l}{p-l}\)。
考虑最大值能在哪儿。容易发现对于所有限制 \((L,R,X)\),如果 \(l\le L,R\le r\),那么最大值不能在 \(X\)。这个用另外一个 \(f_{l,r}\) 记录每一位可不可以,按照长度,\(f_{L,R,x}=1\),\(f_{l,r}=f_{l,r}|f_{l+1,r}|f_{l,r-1}\)。时间复杂度 \(\mathcal{O}(n^3)\)。
等补了 \(B\) 再更新!