解題思路:
(1)使用map,將難度作爲key,報酬作爲value,按照難度從小到大的順序排序
(2)使用map,將人的能力按照從小到大的順序排序,key是能力值,value是原始輸入的位置
(3)使用雙指針,遵循前面人能夠取得的報酬,後面的人也一定能夠取得的原則移動移動指針
(4)看了下沒有通過的測試用例,說是10000份工作,結果只有三四十份工作,也就是數據中很多空行
(5)emmm,能力不足的我解決不了這個問題。。。。。。
#include <iostream>
#include <vector>
#include <map>
using namespace std;
int main() {
int N,M,di,pi,ai;
map<int,int> mpn,mpm;
cin>>N>>M;
for(int i=0;i<N;i++) {
cin>>di>>pi;
mpn[di]=pi;
}
for(int i=0;i<M;i++) {
cin>>ai;
mpm[ai]=i;
}
int *v = new int[M];
auto&& itn=mpn.begin(),itm=mpm.begin();
int maxs = itn->second;
while(itn!=mpn.end()&&itm!=mpm.end()) {
while(itn!=mpn.end()&&itm->first>=itn->first) {
if(itn->second>maxs) maxs = itn->second;
itn++;
}
v[itm->second]=maxs;
itm++;
}
for(int i=0;i<M;i++) cout<<v[i]<<endl;
delete []v;
return 0;
}
/*
3 3
1 100
10 1000
1000000000 1001
9 10 1000000000
*/