#include<bits/stdc++.h> using namespace std; int findNum(const set<int>& s, int x) { /*运行超时,注释的代码相当于把upper_bound转化了一遍但时间复杂度过大*/ /*auto it = s.begin(); vector<int>v; int sum=0; while(it !=s.end()){ if(*it > x){ v.push_back(*it); sum++; } it++; } if(sum == 0){ return -1; }else{ sort(v.begin(),v.end()); return v[0]; }*/ auto it = s.upper_bound(x); /*其中,std::set 中的 upper_bound 函数是用来查找大于给定值的第一个元素的迭代器。 具体来说,std::set::upper_bound 函数接受一个参数,并返回一个指向第一个大于该参数的元素的迭代器。如果找不到这样的元素(即给定值大于集合中的所有元素),则返回 end()。*/ if (it == s.end()) { return -1; } else { return *it; } } int main() { set<int>s; //write your code here...... int n, m, x; cin >> n >> m; for (int i = 0; i < n; i++) { int num; cin >> num; s.insert(num); } for (int i = 0; i < m; i++) { int x; cin >> x; cout << findNum(s, x) << endl; } return 0; }