题目传送门https://vjudge.net/problem/CSES-1091
解题思路
考虑一个 multiset,每次 upper_bound 查询(注意是前一个),若找不到则无解,否则输出它前面的一个。
代码
#include<bits/stdc++.h>
using namespace std;
int n,m;
multiset<int> a;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
int x;
for(int i=1;i<=n;i++)
{
cin>>x;
a.insert(x);
}
for(int i=1;i<=m;i++)
{
cin>>x;
auto it=a.upper_bound(x);
if(it==a.begin())
cout<<-1<<"\n";
else
{
cout<<*(--it)<<"\n";
a.erase(it);
}
}
}