首先答案显然可以二分。
于是问题变成给定 mid,求所有美味度不小于 mid 的果汁种类中混合出至少 Li 升的最小总价格。
其实是个人都能看出来这个地方的至少是没用的,最优解肯定是恰好这么多……
如果只看不小于 mid 的果汁种类,可以以每一种果汁的单价建一棵权值线段树,每个结点保存总体积与总价。
于是直接权值线段树上二分即可求得最小总价格。
实际上用了两个二分,于是复杂度是 O(log2n) 的。
然鹅我们还要多组询问,与其离线整体二分,不如直接把线段树可持久化了。
代码:
1 |
|
首先答案显然可以二分。
于是问题变成给定 mid,求所有美味度不小于 mid 的果汁种类中混合出至少 Li 升的最小总价格。
其实是个人都能看出来这个地方的至少是没用的,最优解肯定是恰好这么多……
如果只看不小于 mid 的果汁种类,可以以每一种果汁的单价建一棵权值线段树,每个结点保存总体积与总价。
于是直接权值线段树上二分即可求得最小总价格。
实际上用了两个二分,于是复杂度是 O(log2n) 的。
然鹅我们还要多组询问,与其离线整体二分,不如直接把线段树可持久化了。
代码:
1 | #include <cstdio> |
Related Issues not found
Please contact @Alpha1022 to initialize the comment