编辑器:vsCode
语言:C++
#include <stdio.h>
#include <windows.h> //keep external terminal
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
struct student{
int y, result, ans;//ans指以该y为阈值,预测正确的个数
};
bool cmp(student a, student b){
if (a.y != b.y) return a.y < b.y;
else return a.result < b.result;
}
int main(){
int m;
scanf("%d", &m);
student stu[m];
for (int i = 0; i < m; i++)
scanf("%d %d", &stu[i].y, &stu[i].result);
sort(stu, stu + m, cmp);
stu[0].ans = 0;
int count0 = 0;//比当前学生的y小的学生中result等于0的个数
if (stu[0].result == 0)
count0++;
for (int i = 1; i < m; i++)
{
if (stu[i].y > stu[i - 1].y)
stu[i].ans = count0;
else if (stu[i].y == stu[i - 1].y)
stu[i].ans = stu[i - 1].ans;
if (stu[i].result == 0)
count0++;
}
int count1 = 0;//记录大于当前stu的y的学生中的1的数量
int ANS=-1;//记录最大的正确个数
int print_ans;
for (int i = m - 1; i >= 0; i--)
{
if (stu[i].result == 1)
count1++;
stu[i].ans += count1;
if(stu[i].ans>ANS){
ANS=stu[i].ans;
print_ans=stu[i].y;//更新满足题意的阈值
}
}
printf("%d\n",print_ans);
system("pause"); //keep external terminal
return 0;
}