[SEERC 2022] J. Joyful Death
题目链接:QOJ14114
题意
现在有 \(m\) 个饼干,第 \(i\) 个饼干有一个权值 \(h_i\) 和一个美味程度 \(t_i\)。
有 \(n\) 个人,第 \(i\) 个人有一个权值 \(a_i\)。
每一个人只能吃权值严格小于自己的饼干,并且一个人最多吃一个饼干。
对于每一个 \(i\) 求出,只有前 \(i\) 个人的情况下,被吃掉的饼干美味程度之和最大值。
\(n,m\le 2\times 10^5\)。
题解
简单题,怎么场上没有做出来的,场下想了一会发现会了。
首先离散化一下,使得所有饼干与人的权值不同。
一个很套路的事情:挑选一些饼干,如何判断这一组饼干能否被吃掉。
设一个后缀中饼干数量是 \(B\),人数是 \(A\),那么只需要所有 \(A-B\ge 0\),这就是一个合法的方案。
然后现在有另一个很套路的事情,每一次新加进来一个人,要么最优方案不变,要么恰好多选一个饼干(并且其余选择的饼干保持选择)。
这是很好证明的,如果你多拿了一个饼干,并且之前的其他饼干进行了调动,不妨考虑这样的事情:
首先,新加进来那个人一定拿了饼干,我们设其拿的是饼干 \(v\)。
考虑当前选择,除了 \(v\) 以外,的所有饼干。
将这些饼干,替换为上一步的方案,则答案一定增大。
那么整道题就很好做了,使用线段树维护每一个后缀 \(A-B\) 的值。
来一个权值为 \(a_i\) 的人,就给 $[1,a_i] $ 这个区间 \(+1\)。
然后考虑这个人是否会多拿一个饼干。
设 \(r\) 为最大的 \(x\) 满足前 \(x\) 个位置 \(A-B\ge 1\)。
选择当前还没有拿走的,权值在 \([1,r]\) 内,美味值最大的饼干即可。
(如果确实存在这么一个饼干),设其权值为 \(v\),再给 \([1,v]\) 这个区间 \(-1\) 即可。
本文来自博客园,作者:Wuyanru,转载请取得作者同意并注明原文链接:https://www.cnblogs.com/Wuyanru/p/22941467
本文内容如有侵权行为,请联系作者删除,qq:1395170470

浙公网安备 33010602011771号