这道题刚一看数据范围,就知道一般的查找肯定会爆,只能用二分,但二分查找代码太过冗长,记不住怎么办?(凉拌 ),所以,我们就搬出STL压箱底的宝贝——lower_bound。
首先,先把所有数放到mulitset里面去,对于每个数的编号用一个map映射过来,方便输出。在处理的时候,用lower_bound来将大于等于当前待查数据的值存入it,如果it大于当前待查数据,说明这个数在序列中不存在,输出-1,否则输出it映射的值。
上代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 50;