为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,牛牛依然使用自己的标准来帮助小伙伴们。牛牛的小伙伴太多了,于是他只好把这个任务交给了你。

#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;

/*
利用map容器来做。
1.创建map容器Job存储难度和薪酬,前者为key,后者为value.由于map默认是根据key自动升序排列的,所以就不用再特地写sort函数了
2.Job按照从小到大排列好后,输入员工能力,并将员工能力用Insert插入到Job中,能力为key,默认value为0.
  map用insert方法插入时不能插入已有关键字的数据。所以若有与Job中难度匹配的能力,其报酬不变。若没有与Job中难度匹配的能力,其报酬默认为0.
3.更新Job中能力与报酬的匹配情况,使得能力范围之内的报酬最大。
4.根据员工能力检索Job,输出对应报酬值
*/
int main()
{
    int N, M;
    map<int, int> Job;
    while (cin >> N >> M)
    {
        int a, b;
        //1.创建map容器Job存储难度和薪酬,前者为key,后者为value.
        for (int i = 0; i < N; i++)
        {
            cin >> a >> b;
            map<int, int>::iterator it = Job.find(a);
            //此处用"array方法"插入而不用Insert是因为若出现重复key前者会覆盖而后者不会
            //判断难度为a的是否已经插入了,若没有,直接插入,若出现了,比较大小,保留薪资大的那一个
            if (it == Job.end())
                Job[a] = b;
            //Job.insert(pair(int,int)(a,b));
            else
            {
                Job[a] = max(it->second, b);
            }
        }
        //2.Job按照从小到大排列好后,输入员工能力,并将员工能力用Insert插入到Job中,能力为key,默认value为0
        vector<int> ability(M);
        for (int i = 0; i < M; i++)
        {
            cin >> ability[i];
            //若对应难度已经存在在Job中,插入失败,若对应难度不存在,插入成功,且value置为0;
            Job.insert(pair<int, int>(ability[i], 0));
        }

        //3.更新Job中能力与报酬的匹配情况,使得能力范围之内的报酬最大。
        map<int, int>::iterator it = Job.begin();
        int maxP = 0;
        while (it!=Job.end())
        {
            if (it->second < maxP)
                it->second = maxP;
            else
                maxP = it->second;
            it++;
        }
        //4.根据员工能力检索Job,输出对应报酬值
        for (int i = 0; i < M; i++)
        {
            cout << Job[ability[i]] << endl;
        }
    }
    return 0;
}