刷了一圈牛客神州信息的算法题竟然一样
第二题正确思路0(nlogm)的时间复杂度,n为capacity的大小,m为arr的大小
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
int[] capacity = new int[n];
int[][] arr = new int[m][2];
for (int i = 0; i < n; i++) {
capacity[i] = in.nextInt();
}
for (int i = 0; i < m; i++) {
arr[i][0] = in.nextInt();
arr[i][1] = in.nextInt();
}
Arrays.sort(capacity);
Arrays.sort(arr, (a, b) -> {
return a[0] != b[0] ? a[0] - b[0] : b[1] - a[1];
});
long ans = 0;
PriorityQueue<Integer> queue = new PriorityQueue<>((a,b) ->{
return b - a;
});
int l = 0;
for(int i = 0;i < n;i++){
int j = lower_bound(arr,capacity[i] + 1);
for(int k = l;k < j;k++){
queue.offer(arr[i][1]);
}
if(!queue.isEmpty()){
ans += queue.poll();
}
l = j;
}
System.out.println(ans);
}
public static int lower_bound(int[][] arr,int t){
int l = -1,r = arr.length;
while(l + 1 < r){
int m = (l + r) >> 1;
if(arr[m][0] >= t){
r = m;
}else{
l = m;
}
}
return r;
}
}
#神州信息求职汇总#
