noi前第十四场 题解

A. ⼩W数排列

做过类似的题,思路大概将所有数从大到小插入。
这样相邻两个位置的贡献就转化为一加一减。

可是这样做会导致值域变得很大,其实这样没用到题中 \(l\) 很小的限制。
考虑这样一个做法,把每次一加一减的贡献差分掉。
每次基准线降低的时候直接统计 降低的高度*降低的个数 的贡献。
因为这个贡献是不降的,所以维护到 \(l\) 就够了。
 

B. ⼩W玩游戏

容易发现行列之间是没有关系的,每次的操作就是改变一行一列的奇偶性。
可以首先处理出选 \(i\) 个奇数行的方案数 \(f_i\),选 \(j\) 个奇数列的方案数 \(g_j\)
那么它们对答案造成的贡献为 \([i(m-j)+j(n-i)\leq k]f_ig_j\)

\(f,g\) 的做法是一样的,考虑其中一个。
考虑用 \(EGF\) 分配对每一行的操作,有这样一个式子。

\[f_i=\binom{n}{i}q![x^q](\frac{e^x+e^{-x}}{2})^{n-i}(\frac{e^x-e^{-x}}{2})^i \]

用一个小技巧,可以发现 \((e^x+e^{-x})+(e^x-e^{-x})=2e^x\),所以用 \(2e^x-(e^x+e^{-x})\) 替换 \(e^x-e^{-x}\)
这样就会发现上面的式子可以暴力二项式定理化成卷积式了,所以可以求出 \(f,g\)

对于能造成贡献的 \(i,j\) 点对,容易发现对于 \(i\) 确定,\(j\) 一定是一段前缀或者后缀。
所以解一下这个不等式,注意讨论 \(n-2i\) 的取值就好了。
 

C. ⼩W维护序列

考虑 \(opt=1\) 应该怎么做,目的是求出选出三元组,满足形成三个集合的乘积和。
与集合有关,做法是用枚举置换来容斥。
其实与斯特林反演比较类似,但是这里不仅枚举环的个数,还枚举每个环的大小,更加具体化一点。
所以可以得到 \(ans=s_1^3-3s_1s_2+2s_3\),其中 \(s_1,s_2,s_3\) 分别为不同的数的权值和、平方和、立方和。
对于 \(opt=5\),问题是不同的数的个数和,其实就是 \(s_0\)
所以不涉及插入删除的操作实际上就是简单的二维数点,用树套树就可以做了。
对于涉及插入删除的操作,其实这题可以离线,所以离线搞一搞在平衡树上二分找排名就行了。
但是简单的树套树需要 \(O(nlog^2n)\) 的空间,其实对于第一棵树上的每一个节点,都把操作和询问离线下来就好了。

posted @ 2020-07-28 08:28  skyh  阅读(208)  评论(0编辑  收藏  举报