这题真是恶心,很久没有一道题搞大半天了。
这个题稍微分析一下,首先发现日期的乱序根本就是出题人闲得无聊,排序一下搞定。
然后,不难看出我们肯定需要维护牛的产奶量的最大值,这个倒是有很多方法搞,可以用平衡树或者离散化 + 线段树什么的。
可是这是不够的。只维护某一天的最大值不能算出是否应该更新相框。
怎么办呢?我们先来考虑有哪几种情况。
在这个图中,max线表示除去这头牛,其他牛的最大产奶量,箭头表示当前的牛产奶量的变化。
红色打勾的情况是需要更新答案的。
\(7\)号和\(8\)号可以放到一起。它们的共同特征是 修改后的值比当前的最大值小,而且之前它是第一名。
我把这种情况叫做王者的陨落
至于\(1, 2, 3, 6\)号就比较麻烦,因为我们不好直接把他们和\(4, 5\)号区分开来。仔细观察,发现我们要区分的话,还需要维护产奶量为特定值的牛的个数。
我这儿选用了map
来维护这个玩意儿。
所以此时,\(4, 5\)号的特征就变成了上一次最大值和这一次最大值都是它,而且没有人跟它现在一样大。
然后,\(1 - 6\)号的共性是现在这头牛的产奶量是最大(之一)的,于是可以用排除法筛选出\(1, 2, 3, 6\)号。
我把\(4, 5\)号叫做王者的余裕
分析到这,就可以动手敲键盘啦!
#include