11.1 联测

A

fnf_n 表示 nn 时的答案。(无解时 fn=inff_n=inf)。

不难发现 fnf_n 是递增的,考虑直接 dp 求解。

先考虑填表法,暴力枚举每个 aia_i,然后 fnaiai+1fnf_{\frac{n}{a_i}a_i}+1 \rarr f_n

没有优化空间啊,考虑刷表法,枚举 fn+1fn+j,j[1,p1]f_n+1 \rarr f_{n+j},j\in[1,p-1]

发现 ppmaxainai\max_{a_i|n}a_i 时一定最优,设为 did_idid_i 可以用埃筛的方式预处理。

现在能做 O(VlogV)O(V\log V) 了,继续优化。

由于 fn=if_n=inn 一定构成一个连续段,考虑维护这个连续段 [l,r][l,r]

每次 lr+1,rmaxi[l,r]dil' \larr r+1,r' \larr \max_{i\in[l,r]}d_i

这样可以做到 O(V)O(V) 预处理,O(1)O(1) 回答询问。


B

如果给定 aali,ril_i,r_i 可以用单调栈求出。

注意到打乱后的 {l},{r}\{l'\},\{r'\} 一定唯一对应一个 {l},{r}\{l\},\{r\}

证明:考虑每个 iirr' 中的出现次数 tit_i,发现 tit_i 即是扫到 ii 是单调栈的弹出次数

单调栈在任意时刻的状态确定,{l},{r}\{l\},\{r\} 也就唯一确定了。

现在问题等价于,给定笛卡尔树的形态,求标号方法(或者说拓扑序)

这个的方案数是 n!sizin!\prod siz_i