【题目】
期末预测之最佳阈值
【相关知识】
前缀和差分
【参考文章】
期末预测之最佳阈值-知乎
【AC代码】
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAX=1e5+10;
struct student{
int y;
int res;
}a[MAX];
int m;
bool cmp(student a,student b)
{
if(a.y==b.y) return a.res>b.res;
else return a.y<b.y;
}
int sum0[MAX];/* 前缀0 */
int sum1[MAX];/* 后缀1 */
int main()
{
cin>>m;
for(int i=1;i<=m;i++) cin>>a[i].y>>a[i].res;
sort(a+1,a+m+1,cmp);
/* 前缀0 */
for(int i=1;i<=m;i++){
if(a[i].res==0) sum0[i]=sum0[i-1]+1;
else sum0[i]=sum0[i-1];
}
/* 后缀1 */
for(int i=m;i>=1;i--){
if(a[i].res==1) sum1[i]=sum1[i+1]+1;
else sum1[i]=sum1[i+1];
}
int ans=0,max_r=0;
for(int i=1;i<=m;i++){
int right=sum0[i]+sum1[i];
if(right>=max_r) max_r=right,ans=a[i].y;
}
cout<<ans<<endl;
return 0;
}