为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,牛牛依然使用自己的标准来帮助小伙伴们。牛牛的小伙伴太多了,于是他只好把这个任务交给了你。
每个输入包含一个测试用例。 每个测试用例的第一行包含两个正整数,分别表示工作的数量N(N<=100000)和小伙伴的数量M(M<=100000)。 接下来的N行每行包含两个正整数,分别表示该项工作的难度Di(Di<=1000000000)和报酬Pi(Pi<=1000000000)。 接下来的一行包含M个正整数,分别表示M个小伙伴的能力值Ai(Ai<=1000000000)。 保证不存在两项工作的报酬相同。
# include <stdio.h>
# include <malloc.h>typedef struct node
{
long di;
long pi;
}Node,*Pnode;
void sort(Pnode work,int size);
void find(Pnode work,long* frien,int M,int N);
int main()
{
long N,M;
scanf("%ld%ld",&N,&M);
Pnode work=(Pnode)malloc(sizeof(Node)*N);
for(int i=0;i<N;i++)
scanf("%ld%ld",&work[i].di,&work[i].pi);
long* frien=(long*)malloc(sizeof(long)*M);
for(int j=0;j<M;j++)
scanf("%ld",&frien[j]);
sort(work,N);
find(work,frien,M,N);
for(int i=0;i<M;i++)
printf("%ld ",frien[i]);
return 0;
}
void sort(Pnode work,int size)
{
Node t;
bool change=true;
for(int i=0;i<size && change;i++)
{
change=false;
for(int j=size-1;j>i;j--)
if(work[j].di<work[i].di)
{
t=work[j];
work[j]=work[i];
work[i]=t;
change=true;
}
}
}
void find(Pnode work,long* frien,int M,int N)
{
long val=-1;
for(int i=0;i<M;i++)
{
for(int j=0;j<N;j++)
if(frien[i]>=work[j].di )
{
if(work[j].pi>val)
val=work[j].pi;
}
frien[i]=val;
//printf("val=%ld ",val);
val=-1;
}
}