第一次遇到容斥与线性 DP 的结合!/se
正难则反,总方案数是 (prod a_i),要减去至少对一个 (i) 有 (X_i=X_{i+1}) 的 (X) 的数量。
这玩意就是个显然的容斥了(现在想起来,容斥正是一种特殊的「先算混合物,然后除杂」的思想)。可以把对 (i) 满足的看成一个集合,那么要求的就是这些集合的并的大小。而这个 (2^{?}) 个集合的大小都是可以显式求的,对于若干个 (i) 的并,设它们把位置们连接成了若干个极大的区间 ([l_i,r_i]),那么答案就是 (prodminlimits_{j=l_i}^{r_i}{a_j})。
不难发现,若分成 (x) 个区间,就是有 (n-x) 个连接处,贡献就是 ((-1)^{n-x+1})。然后这玩意算出来是作为减数,贡献就是 ((-1)^{n-x}),对于「正难则反」中的总方案数,就是分成 (n) 个区间,贡献就是 (1)。
那么这个指数级别个集合的并的贡献和该怎么搞呢。它是一个一个区间地乘上去的形式,容易想到线性 DP:把 ((-1)^{n-x}) 的 ((-1)^n) 提出来,那么每多一个区间就多个 (-1) 的贡献:(dp_i=-sumlimits_{j=1}^iminlimits_{k=j}^i{a_k}dp_{j-1})。这个就很好处理了,单调栈随便做。