晚上游戏打到一半舍友说分数出来了,和预想的差不多
C和D题对着数据范围骗了一点分。。。
B题确实比之前几次都难啊,没接触过确实很难想出来。
排序之后,对于每一个可能的答案,维护当前阈值下正确的个数即可。具体可以看代码
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cstdio>
using namespace std;
int n;
struct node
{
int y;
int res;
}save[100100];
int ans=0;
int te=0;
bool cmp(node a,node b)
{
return a.y<=b.y;
}
int huan=0;
int qian;
int main()
{
// cout<<" S32gs";
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&save[i].y,&save[i].res);
}
sort(save+1,save+n+1,cmp);
te=0;
ans=save[n].y;
for(int i=1;i<=n;i++)
{
if (save[i].y>=ans&&save[i].res==1)
{
te++;
}
else if (save[i].y<ans&&save[i].res==0)
{
te++;
}
}
qian=te;
for(int i=n-1;i>=1;i--)
{
if (save[i].y==save[i+1].y)
{
continue;
}
huan=0;
for(int j=i;j>=1;j--)
{
if (save[j].y!=save[i].y)
{
break;
}
else
{
if(save[j].res==1)
{
huan++;
}
else
{
huan--;
}
}
}
if (huan>0&&qian+huan>te)
{
ans=save[i].y;
te=qian+huan;
}
qian=qian+huan;
}
cout<<ans;
}