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\) 再更新!

posted @ 2024-08-08 22:55  SFlyer  阅读(12)  评论(0编辑  收藏  举报