题目传送门: 黑帮老大的金店黑帮老大的金店
数据结构选择:
建议使用 multiset 来存储金饰的品质。multiset 可以自动排序,并且支持高效的查找和删除操作。当然你直接暴力也无可厚非。
处理流程:
读取输入的(n)和(m)。 将 (n) 个金饰的品质插入到 multiset 中。 对于每个顾客的需求(x): 使用 lower_bound 函数在 multiset中查找第一个大于或等于(x)的元素。 如果找到,输出该元素并从multiset 中删除它。 如果没有找到,输出(−1)。
代码实现:
#include<bits/stdc++.h>
using namespace std;
int main(){
// 读取输入的整数 n 和 m
int n,m;
cin>>n>>m;
// 创建一个 multiset 来存储 n 个整数
multiset<int> na;
for(int i=0;i<n;i++){
int x;
cin>>x;
na.insert(x);
}
// 处理 m 次查询
while(m--){
int x;
cin>>x;
// 查找第一个大于或等于 x 的元素
multiset<int>::iterator it=na.lower_bound(x);
if(it==na.end()){
// 如果没有找到,输出 -1
cout<<"-1"<<endl;
}else{
// 如果找到,输出该元素并从集合中删除并输出
cout<<*it<<endl;
na.erase(it);
}
}
return 0;
}