1 条题解

  • 0
    @ 2026-4-4 18:02:35

    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
    上传者