增加点$a_i$,然后一个位置只能挤一个不然,就要往上挤。询问最少要增高多少。
可以看成二分图匹配。
假设$s$
$f[j]$表示$j$以上的$a_j$有几个。
根据$hall$定理,$s-j+1\geq f[j]$.
根据$hall$定理,$s\geq f[j]+j-1$.
$(max(a_i),s]$必然可以。
只需要找$f[i]\in[1,max(a_i)]$的最大值。
然后维护就是$[1,j]$的$f[j]$的区间$+$。
代码
1 |
|
增加点$a_i$,然后一个位置只能挤一个不然,就要往上挤。询问最少要增高多少。
可以看成二分图匹配。
假设$s$
$f[j]$表示$j$以上的$a_j$有几个。
根据$hall$定理,$s-j+1\geq f[j]$.
根据$hall$定理,$s\geq f[j]+j-1$.
$(max(a_i),s]$必然可以。
只需要找$f[i]\in[1,max(a_i)]$的最大值。
然后维护就是$[1,j]$的$f[j]$的区间$+$。
1 |
|