2024.2.25 近期练习

P5892

有一个很明显的 \(O(n^2\log n)\) 暴力,也就是枚举左右端点,然后区间查询前 \(k\) 大。
主席树即可维护前 \(k\) 大。
考虑优化,盲猜决策单调性,于是用分治法求出。

P4067

答案是 \(全部和-k 以内的和-(全部个数- k 以内数目)\times k\)
数位 dp。
\(f(p,lim_i,lim_j,lim_k)\) 即可,表示当前填到第 \(p\) 位,是否有 \(i/j/k\) 的最高位限制。
同时记录和,以及个数即可。

P7219

直方图。考虑建出笛卡尔树,那有什么用呢?
两个星星之间若可以共存,取决于其横轴坐标区间上的最高的船。
考虑笛卡尔树上树形 dp。设 \(dp_{u,i}\) 表示点 \(u\) 子树内最高的高度是 \(i\)
转移的话分讨 \(u\) 这列选不选。
线段树合并优化,支持全局加,单点取 \(\max\)⁡,询问区间 \(⁡\max\)

P5072

我们拆贡献,设元素 \(x\) 出现了 \(c\) 次,那么其贡献是 \(2^n-2^{n-c}\)
考虑莫队,维护每个元素的出现次数。
由于出现次数一样的数是等价的,我们维护出现次数相同的数的和。
只需要用双向链表维护不同的出现次数即可,最多的是 \(O(\sqrt n)\) 的,哈希表也行。
还有一个问题,需要快速的计算 $2^n\bmod $ 任意模数,需要光速幂。

P5985

考虑把这个题放到 01trie 上去考虑,考虑在 01 trie 上面 dp。
我们在字典树上,往右走就是把 \(f\) 整体加上 \(1\)
由于 \(n\) 很小,我们考虑把区间设为状态。设 \(dp_{u,l,r}\) 表示 \([l,r]\) 都在字典树 \(u\) 节点之内的最大值。
转移直接枚举切点,\(dp_{u,l,r}=\max(dp_{ls,l,k}+dp_{rs,k+1,r}+sum(k+1,r))\)
由于字典树只有 \(\log m\) 种大小不同的子树,所以状态数是 \(n^2\log m\) 级别。
复杂度 \(O(n^3\log m)\),使用区间 dp 的决策单调性优化可以到 \(O(n^2\log m)\) 级别。

P4495

首先与 \(p\)\(\gcd\) 相同的数其实是等价的。所以最多有 \(\sigma_0(p)\le2e3\) 个。
若我们同时选了一个 \(x\) 的倍数和一个 \(y\) 的倍数,那么所有 \(\gcd(x,y)\) 的倍数都可以被拼出。
\(f_{i,d}\) 表示前 \(i\) 个数,仅能拼出 \(d\) 的倍数的方案数。
复杂度是 \(O(\sigma_0(p)^2)\)

posted @ 2024-02-26 21:01  GloriousCc  阅读(6)  评论(0编辑  收藏  举报