题意: 将会有 n 个人在竞价,一共叫了 n 次价(价格递增)。一个人可以叫多次价,但不会自己压自己的价
(例如 1 1 \n 1 2 这是不会出现的),当然也就会出现有的人没叫价。
现在有 q 个询问,每个询问为
有 k 个人没来,分别为 li ,现在求最后的winner和价格。
(所有的 k 加起来 < 200000)。
思路: 考虑第一小问,如果我们把每个人叫的最高价记录,排个序,再用树状数组(由于所有的 k 加起来 < 200000,所以可以每次询问时将所有的没来的人点更新 )+二分维护有来的人中出价最高的那个人 tp1,这就相当于第一问解决。
第二问, 在第一问的基础上,把有来的人中出价最高的那个人当成没来,也就是说求出有来的人中出价次高的那个人 tp2 ,然后 再二分查找 tp1 出的钱恰好多于 tp2 出的钱的那个钱数就是答案。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <stack>
#include <vector>
#include <cstring>
#include <queue>
#define msc(X) memset(X,-1,sizeof(X))
#define ms(X) memset(X,0,sizeof(X))
typedef long long LL;
using namesp