牛客网-牛牛找工作

package practice;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;



/**

- 输入描述:

- 每个输入包含一个测试用例。

- 每个测试用例的第一行包含两个正整数,分别表示工作的数量N(N<=100000)和小伙伴的数量M(M<=100000)。

- 接下来的N行每行包含两个正整数,分别表示该项工作的难度Di(Di<=1000000000)和报酬Pi(Pi<=1000000000)。

- 接下来的一行包含M个正整数,分别表示M个小伙伴的能力值Ai(Ai<=1000000000)。

- 保证不存在两项工作的报酬相同。

- 输出描述:

- 对于每个小伙伴,在单独的一行输出一个正整数表示他能得到的最高报酬。一个工作可以被多个人选择。

- 

- 示例1

- 输入

- 3 3 

- 1 100 

- 10 1000 

- 1000000000 1001 

- 9 10 1000000000

- 输出

- 100 

- 1000 

- 1001
  */
  public class FindWork {
  @SuppressWarnings({ "rawtypes", "resource", "unused", "unchecked" })
  public static void main(String args[]){
    Scanner input=new Scanner(System.in);
    int work_num;
    int person_num;
    long Pi[]=new long[100000];
    long Di[]=new long[100000];
    long Ai[]=new long[100000];
    long arg[]=new long[200005]; //人能力值+工作能力值
    long result[]=new long[200005];
    HashMap map=new HashMap();
    work_num=input.nextInt();
    person_num=input.nextInt();
    for(int i=0;i<work_num;i++){
        Di[i]=input.nextLong();
        Pi[i]=input.nextLong();
        arg[i]=Di[i];
    }
    for(int i=0;i<person_num;i++){
        Ai[i]=input.nextLong();
        arg[i+work_num]=Ai[i];
    }
    Arrays.sort(arg);  //对所有能力值进行排序
    int num=0;
    map.put(arg[0],num);
    //过滤掉重复的map中记录能力值和在所有能力值中的索引
    for(int i=1;i<arg.length;i++){
        if(arg[i]!=arg[i-1]){
            num++;
        map.put(arg[i],num);
        }
    }
    //将工作能力值所用到的报酬进行匹配
    for(int i =0;i<work_num;i++){
        result[(int) map.get(Di[i])]=Math.max(result[(int) map.get(Di[i])], Pi[i]);
    }
    //将还没有记录报酬的能力值进行赋值 同时将小于自身能力的最大报酬进行赋值 得到在此能力下可以获得的最大报酬
      for (int i = 1 ; i < work_num+person_num ;i++)
        result[i] = Math.max(result[i],result[i-1]);
      for (int i = 0 ; i < work_num ;i++)
        System.out.println(result[(int) map.get(Ai[i])]);
      
  }

  

}

转载于:https://www.cnblogs.com/lihuidong/p/11385637.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值