题目描述
券夹初始为空,依次发生 条操作:
1 a:收进一张面值为 的优惠券;2 b:来了位预算为 的客人——用掉一张面值不超过 的面值最大的券(也就是「买得起的券里最贵的那张」),输出这张券的面值;一张买得起的都没有就输出 。
被用掉的券随之消失。面值和预算都可能高达 ,请用 long long。
提示:ms.upper_bound(b) 指向第一个大于 的位置,用 prev 退一步就是 的最大面值;若 upper_bound(b) 已经是 ms.begin(),说明连一张都买不起。
输入格式
第一行一个整数 ()。
接下来 行,每行两个整数 op x: 为 或 ; 时 为面值 (), 时 为预算 ()。
输出格式
对每条 2 操作输出一行一个整数:用掉的券的面值,或 。
样例
输入:
8
1 30
1 70
1 50
2 60
2 20
2 70
2 100
2 30
输出:
50
-1
70
30
-1
预算 60 时两张券都买得起,优先用掉面值大的 50;预算 20 一张都买不起,输出 -1。
数据范围
,。小心方向:要的是「 的最大」,别写成「 的最小」——客人想要的是尽量花掉最贵的券,而不是硬买超预算的。