学习记录--牛牛找工作

牛牛找工作,带详细注释
//为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,
//牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,
//牛牛依然使用自己的标准来帮助小伙伴们。牛牛的小伙伴太多了,于是他只好把这个任务交给了你。
//输入描述:
//
//每个输入包含一个测试用例。
//每个测试用例的第一行包含两个正整数,分别表示工作的数量和小伙伴的数量。
//接下来的N行每行包含两个正整数,分别表示该项工作的难度和报酬。
//接下来的一行包含M个正整数,分别表示M个小伙伴的能力值。
//保证不存在两项工作的报酬相同。
//输出描述:
//
//对于每个小伙伴,在单独的一行输出一个正整数表示他能得到的最高报酬。一个工作可以被多个人选择。
//样例:
//
//in :
//3 3
//1 100
//10 1000
//1000000000 1001
//9 10 1000000000
//
//out :
//	100
//	1000
//	1001

#include
#include //vector头文件
#include //sort头文件

using namespace std;

int main() 
{
	for (int m, n; cin >> n >> m;) //n工作的数量,m小伙伴的数量
	{
		vector> arr;//存放工作的难度和薪酬
		for (int i = 0; i < n; i++)
		{
			int d, p;
			cin >> d >> p;
			arr.emplace_back(d, p);//在容器后面依次存放每个工作的难度和薪酬
		}
		sort(arr.begin(), arr.end());//对arr排序,从小到大
		vector ans(n);//存放工作的薪酬
		ans[0] = arr[0].second;
		for (int i = 1; i < (int)arr.size(); i++)
		{
			ans[i] = max(ans[i - 1], arr[i].second);//arr已经按照工作的难度进行排序,然后比较相邻工作的薪酬
			                                         //较大者存入ans
		}
		for (int x; m--; )
		{
 		    cin >> x;
			cout << ans[upper_bound(arr.begin(), arr.end(), make_pair(x, 0x3f3f3f3f)) - 1 - arr.begin()] << endl;
			//upper_bound返回第一个大于make_pair(x, 0x3f3f3f3f)的位置
			//减1:向前移一位
			//减去首地址,得到序号
		}
	}
	return 0;
}


你可能感兴趣的:(学习记录--牛牛找工作)