思路:
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
public static void main(String[] args)
{
//创建一个类存放y和result
class Pair{
int y;
int result;
public Pair(int y,int result) {
this.y = y;
this.result = result;
}
}
//读入m
Scanner in = new Scanner(System.in);
int m = in.nextInt();
//定义前缀和,后缀和数组
int[] prefix = new int[m + 2];
int[] suffix = new int[m + 2];
//数据数组
ArrayList<Pair> data = new ArrayList<Pair>();
data.add(new Pair(0,0));
//读入数据
for(int i = 0 ;i < m ; i++) {
int y = in.nextInt();
int result = in.nextInt();
data.add(new Pair(y, result));
}
//根据y值升序排序
data.sort(new Comparator<Pair>() {
@Override
public int compare(Pair o1,Pair o2) {
if(o1.y > o2.y) {
return 1;
}else if(o1.y == o2.y) {
return 0;
}else {
return -1;
}
}
});
//计算前缀和,统计前缀中为0的个数
for(int i = 1; i <= m ; i++) {
prefix[i] = prefix[i - 1] + (data.get(i).result == 0 ? 1 : 0);
}
//计算后缀和,统计后缀中为1的个数
for(int i = m; i >= 1 ; i--) {
suffix[i] = suffix[i + 1] + (data.get(i).result == 1 ? 1 : 0);
}
//记录重复的y值的最小下标
int pos = 1;
int[] p = new int[m+1];
p[1] = 1;
for(int i = 1; i <= m; i++) {
if(data.get(i).y == data.get(i - 1).y)
p[i] = pos;
else {
pos = i;
p[i] = pos;
}
}
//mx记录最大的正确次数,cur记录当前预测正确的次数
int ans = 0,mx = 0;
for(int i = 1;i <= m; i++) {
int cur = prefix[p[i] - 1] + suffix[i];
if(cur >= mx) {
mx = cur;
ans = data.get(i).y;
}
}
System.out.println(ans);
}
}