[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\) 即可。

posted @ 2026-09-11 23:40  Wuyanru  阅读(6)  评论(0)    收藏  举报