当前位置: 首页 > news >正文

CF241B

CF241B

给定 \(n\) 个数 \(a_1 \sim a_n\) 和整数 \(m\),要选出 \(m\) 个不同的数对 \((i, j)(i <j)\),使得 \(\sum a_i \oplus a_j\) 最大,求出这个最大值

\(n \le 5 \times 10^4, m \le \frac{n(n - 1)}{2}, 0 \le a_i \le 10^9\)

首先肯定是贪心的选最大的 \(m\) 个,但是如何找到一个优秀的选择(排列)方式呢?

发现其实不好搞,这时我们就可以想到(看题解得到二分\(m\) 个中最小的那个。

设二分的 \(val\),如何 check 呢?可以枚举 \(a_i\),使用 01 trie 求出有多少个 \(a_j\) 满足 \(a_i \oplus a_j \ge val\),最后加起来除以二就算出来了有多少对 \((i, j), a_i \oplus a_j \ge val\)

求出 \(val\) 之后计算出 \(\sum \limits_{a_i \oplus a_j \ge val} a_i \oplus a_j\) 即可。同样枚举 \(a_i\),预处理出 \(s_{u, x}\) 表示 01 trie\(u\) 的子树的叶子节点中有多少个 \(a_i\)\(x\) 位位 \(1\)。然后在 trie 上跑一遍,遇到 \(val\) 这一位为 \(0\) 的时候累加答案即可。最后还要除以二。

还有,因为 \(\ge val\) 的可能超过 \(m\) 个,还需要减掉多余的部分(这些都是 \(val\))。

时间复杂度:

  • 枚举 \(a_i\),算出多少个 \(a_i \oplus a_j \ge val\),是 \(O(n \log V)\),再套个二分。
  • 求和的时候,因为每个每一位都要算答案,是 \(O(n \log^2 V)\)
  • 两部分都是 \(O(n \log ^2V)\),所以总复杂度是 \(O(n \log^2V)\)

难点在于要想到二分答案(因为直接贪心的选不好做。)

http://www.rkmt.cn/news/125110.html

相关文章:

  • 蒟蒻入园
  • Level 6 → Level 7
  • 题解:qoj15502 字符串问题
  • P10217 [省选联考 2024] 季风 题解
  • 测试文章
  • 差分电压采样
  • [WC 2016] 论战捆竹竿
  • 12/19
  • 实验6作业
  • Mintlify平台静态资产API跨租户内容注入漏洞分析
  • Experiment 6
  • 102302134陈蔡裔数据采集综合实践
  • A2A协议
  • C语言之成绩排序
  • 使用sharedPerences保存app配置文件
  • 分享文件:charles-proxy-4.6.3-win64.msi
  • 2025年12月中医馆,昆明中医,云南中医馆推荐:行业权威盘点与品质诊疗红榜发布 - 品牌鉴赏师
  • Android ALSA驱动进阶之获取周期帧数snd_pcm_lib_period_frames:用法实例(九十五) - 详解
  • 从研究问题到分析初稿:深度解析PaperXie AI科研工具中数据分析模块在学术写作场景下的辅助逻辑与技能实现路径
  • 详细介绍:Golang Cobra 教程:构建强大的CLI应用
  • 在 Windows 11 中,以管理员权限打开 CMD(命令提示符)的几种常用方法
  • 完整教程:Live2D形象展示与文本语音播报:打造生动交互体验的完整实现
  • SSM基于信息安全的无锡旅游服务系统5l83d(脚本+源码+数据库+调试部署+研发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
  • 【赵渝强老师】国产金仓数据库的数据库集群
  • 12.19 程序员修炼之道:从小工到专家 - GENGAR
  • 06.cloundflare的使用
  • 完整教程:Flutter 布局入门
  • CVE-2025-14910:Edimax BR-6208AC路由器路径遍历漏洞深度解析
  • 完整教程:CentOS快速安装DockerCE指南
  • 英语_阅读_a plan for cancer prevention_待读