1 条题解
-
0
import java.util.Arrays; import java.util.Scanner;
public class Main { public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //思路:数组装蛋糕和id, //差分得到修改完的碟子 //把碟子排序,二分找符合的碟子角标 int n=sc.nextInt(); int k=sc.nextInt(); int [][]dif=new int[n+2][2];//装蛋糕数和id while(k-->0) { int l=sc.nextInt(); int r=sc.nextInt(); dif[l][0]++; dif[r+1][0]--;//差分 } for(int i=1;i<=n;i++) { dif[i][0]+=dif[i-1][0]; dif[i][1]=i; } //根据蛋糕排序1-n Arrays.sort(dif, 1, n + 1, (d1, d2) -> { if (d1[0] != d2[0]) { return Integer.compare(d1[0], d2[0]); } else { return Integer.compare(d1[1], d2[1]); } }); int q=sc.nextInt();//查询 for(int i=0;i<q;i++) { int x=sc.nextInt(); if(x>dif[n][0]) { System.out.println(-1); continue; } int l=1,r=n,j=0; while(l<=r) {//二分找符合的位置 int mid=l+(r-l)/2; if(dif[mid][0]>=x) { r=mid-1; j=dif[mid][1];//位置 }else l=mid+1; } System.out.println(j); } }}
信息
- ID
- 710
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 213
- 已通过
- 60
- 上传者