若我们并肩作战,你要照顾好自己哦?|

xingyu_xuan

园龄:1年6个月粉丝:12关注:1

k 元组与集合取 min/max 碰撞的火花

非常感谢洛谷的推荐题目功能。

举个例子,如果我们要求 and 起来等于 1nk 元组个数,该怎么办?

我们可以先做一遍高维后缀和,此时设得到的数组 fi 为是 n 的超集的数的个数。

我们发现其实我们在 n 的超集中选任意 k 个数,这 k 个数 and 起来一定是 n 的超集。所以我们可以 fi(fik)。此时 fi 表示的则是 and 起来是 n 的超集的 k 元组个数。我们发现 fi 实质上可以拆解成 and 起来是每个是 n 的超集的 k 元组个数之和(直接拆就行了,我当时第一次理解的时候理解了半天,太唐了),所以这个东西是一个高维后缀和,我们做一遍高维差分之后就是 and 起来是 nk 元组个数。

所以我们对集合取 minmax 在集合前后缀上体现的非常明显,基本在高维前/后缀和上转化一下权值再做一遍高维差分就能解决。k 元组问题是典型。

例题:P2714 四元组统计

注意到其实 gcd 其实就是在约数指数这个集合内取 min,那么做一遍 Dirichlet 后缀和,然后把个数变成 4 元组的个数,然后再做一遍 Dirichlet 差分即可。

AC 记录

本文作者:xingyu_xuan

本文链接:https://www.cnblogs.com/xingyuxuan/p/18175739

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   xingyu_xuan  阅读(27)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起