AGC013F Two Faced Cards
题意 : 给出
有
每次会向
对
中每一个二元组选定一个元素作为这个二元组的值,产生新集合 将
中元素两两匹配(此时 )。 能匹配 当且仅当 。 如果匹配成功,获得的分数等于:第 1 步中,取第一个数作为值的二元组数量。
对于每个操作,求最大匹配分数,或指出无解。
首先将所有数关于
先不考虑操作。若给定
对于二元组
对于剩下的二元组,按照
如何判定序列
在任意排列后能否满足 ? 利用辅助数组
,对于 ,将 减一。 对于
,将 加一。 若
全部非负,则存在合法方案。 于是,若将一个
的 翻面,则相当于将 加一。
现在考虑操作。
对于一个新加入的二元组
我们将问题转化为了:
给出
数组,和若干个区间。 每次再(独立地)进行一次前缀减,问至少选多少个区间加一可以使得整个数组非负。或指出无解。
设这次单独的前缀减为
先求
从后往前查看
然后从小到大依次求
当
- 正确性理解:容易发现上述贪心得到的方案中,任意去掉一个区间,都会导致不合法。
区间加可以用差分实现。
复杂度为