c++ - 我如何解决 Codeforces Beta 第 12 轮问题 D?

标签 c++ algorithm

Click here to view the problem.

我无法找到比 O(n^2) 更好的解决方案,但是当 n<=500000 时,这是行不通的!

我的想法是按(美貌+智力+丰富)对它们进行排序,然后用它后面的任何一个进行测试。

请帮忙!

最佳答案

如果将问题限制在两个属性上(例如,只有 B_iR_i,仅用于说明目的),您可以将这些属性视为 2D 平面中的点.对于每个点(对应于一位女士),您必须计算给定点“右上方”的(半无限)矩形中的点数。

我认为比 O(n^2) 更快的解决方案将涉及 range tree虽然我没有想过细节。另见插图 here .

编辑:并且您将存储(或在构建时更新)每个节点“下方”的节点数,这样您就可以,例如轻松获取给定节点 split 点以下或以上的点数。

关于c++ - 我如何解决 Codeforces Beta 第 12 轮问题 D?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3866441/

相关文章:

java - 计算一个数字的最大最佳面额组合

c++ - Tic Tac Toe 失败的 MiniMax 算法

c++ - GetGuiThreadInfo() 是如何工作的?

c++ - 我刚刚使用 IwNUI 启动了最基本的 Marmalade c++ 应用程序,但它出现了错误。这条消息是什么意思?

c++ - 有没有办法提前测试Windows exe是否会因为缺少dll而无法加载?

php - 从文本 blob 中检测名字和姓氏的最佳方法

algorithm - 如何在摊销分析中提出潜在的功能?

javascript - JS;简单数组中的最大路径和练习;无效结果

c++ - 什么类型的变量包含 lambda

c++ - 为什么我的应用程序无法解码 RTSP 流?