代码很烂,将就看吧;
两个数组分别存x和y坐标,将x坐标排序,两个map存x对应的序号,每次都从拍好序的x往后面倒,如果倒下的牌的范围比当前范围大,则替换当前范围
import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Scanner;  public class Demo23 { public static void main(String[] args) {
        Scanner in=new Scanner(System.in);  int n=in.nextInt();  int a[]=new int[n+1];  int b[]=new int[n+1];  Map<Integer,Integer>map=new HashMap<Integer, Integer>(n);  Map<Integer,Integer>map1=new HashMap<Integer, Integer>(n);  for (int i = 1; i < n+1; i++) { int test=in.nextInt();  a[i]=test;  int test1=in.nextInt();  b[i]=test1;  map.put(i,test);  map1.put(test,i);  }
        Arrays.sort(a);  for (int i = 1; i <n+1 ; i++) { int x=map.get(i);  int flag=0;  for (int j =1; j < n+1; j++) { if (a[j]==x){
                    flag=j;  break;  }
            } int y=b[i];  int temp=0;  temp=x+y-1;  int num=0;  while (flag<n+1){ if (flag==n) { break;  } else { if (a[flag+1]>=x+1&&a[flag+1]<=temp){
                        num++;  if (a[flag+1]+b[map1.get(map.get(flag))+1]-1>temp)temp=a[flag+1]+b[map1.get(map.get(flag))+1]-1;  }
                }
                flag++;  }
            System.out.println(num+1);   }
    }
}