2023.8.2 AT practise
ARC067E
设计状态 \(f(j,i)\),表示当前分的是每组 \(j\) 个人,已经有 \(i\) 个人在组里了。
\(f(j,i+k\cdot j)\leftarrow f(j-1,i)\cdot \dfrac{1}{k!}\prod_{x=1}^k C(n-i-(x-1)\cdot j,j)\)
复杂度 \(O(n^2\ln n)\),因为枚举 \(k\) 是调和级数的。
ARC067F
首先有一个 \(O(n^2 m)\) 的暴力做法,枚举区间,在枚举每张券计算最大值。
我们考虑反过来,对于每个位置,考虑其能贡献的区间,
每张劵都是独立的,考虑每张劵,每个位置它为最大值的区间,单调栈求出。
若一个位置 \(i\),其左边第一大的位置是 \(L\),右边是 \(R\),注意这里左边如果大于,右边必须大于等于。
那么对于所有左端点 \(x \in[L+1,i]\),右端点 \(y \in [i,R-1]\),的区间,这个位置都要贡献。
使用二维差分,把 \([L+1,i]\times [i,R-1]\) 这个矩阵做贡献即可。