AcWing 3298. 期末预测之最佳阈值
原题链接
中等
作者:
风中相聚
,
2021-04-06 19:54:04
,
所有人可见
,
阅读 490
C++ 代码
#include<iostream>
#include<algorithm>
using namespace std;
const int N=100010;
pair<int,int> a[N];
int s[2][N];//记录前缀和
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a[i].first,&a[i].second);
}
sort(a+1,a+1+n);//sort对于pair排序默认从first由小到大,再second从小到大
for(int i=1;i<=n;i++)
{
for(int j=0;j<2;j++)
{
s[j][i]=s[j][i-1]+(j==a[i].second);
}
}
int res=0,sum=-1;
for(int i=1;i<=n;i++)
{
int j=i;
while(j+1<=n&&a[j+1].first==a[i].first) j++;//重复的数字只处理第一个,后面的重复按下面的处理就不对了,必须只能处理第一个
int t=s[0][i-1]+s[1][n]-s[1][i-1];
if(t>=sum)
{
sum=t;
res=a[i].first;
}
i=j;
}
cout<<res;
return 0;
}