我解决了一个问题,然后将其缩小为以下问题:
给定n
分(x1, y1), ..., (xn, yn)
分(0 <= xi, yi
),和两个整数 A
和B
(0 <= A, B
我需要找到这些点的子集,以便:
1)x
值的总和最多为A
(SUM(x) <= A
)。
2)y
值的总和至少为B
(SUM(y) >= B
)。
我正在努力解决这个问题,除了合并之外我找不到解决方案。我会很感激一些想法。
UPD :xi和A是有理数(表示为浮点数/双精度数)。 yi和B是整数。
答案 0 :(得分:0)
根据分布和可用空间,我们可以创建"merge sort" segment tree,其中段划分X
范围,树阵列节点按y
值排序。然后测试A
的分区,以便我们可以选择每个部分右边界最多的x
个s,从分段树中选择y
中的前O(log n)
个值