#include<stdio.h>
#define MAX_N 100000+16
typedef struct
{
int s,f;
int rank;
}Cow;
int N,C,F,half;
Cow cow1[MAX_N],cow2[MAX_N];
void qsort1(int l,int r);
void qsort2(int l,int r);
int main(void)
{
int i,total,right,left,l,r,m,ans;
scanf("%d%d%d",&N,&C,&F);
half=N/2;
for(i=0;i<C;i++)
scanf("%d%d",&cow1[i].s,&cow1[i].f);
qsort1(0,C-1);
for(i=0;i<C;i++)
{
cow1[i].rank=i;
cow2[i]=cow1[i];
}
qsort2(0,C-1);
l=0;r=C;ans=-1;
while(l<r)
{
m=(l+r)/2;
left=0;right=0;total=cow1[m].f;
for(i=0;i<C;i++)
{
if((cow2[i].rank<m)&&(total+cow2[i].f<=F)&&(left<half))
{
left++;
total+=cow2[i].f;
}
else
if((cow2[i].rank>m)&&(total+cow2[i].f<=F)&&(right<half))
{
right++;
total+=cow2[i].f;
}
}
if((left<half)&&(right<half))
{
ans=-1;
break;
}
else
if(left<half)
l=m+1;
else
if(right<half)
r=m;
else
{
ans=cow1[m].s;
l=m+1;
}
}
printf("%d\n",ans);
}
void qsort1(int l,int r)
{
int i,j;
Cow x;
if(l<r)
{
i=l;j=r;x=cow1[i];
while(i<j)
{
while(i<j&&cow1[j].s>=x.s) j--;
if(i<j) cow1[i++]=cow1[j];
while(i<j&&cow1[i].s<x.s) i++;
if(i<j) cow1[j--]=cow1[i];
}
cow1[i]=x;
qsort1(l,i-1);
qsort1(i+1,r);
}
}
void qsort2(int l,int r)
{
int i,j;
Cow x;
if(l<r)
{
i=l;j=r;x=cow2[i];
while(i<j)
{
while(i<j&&cow2[j].f>=x.f) j--;
if(i<j) cow2[i++]=cow2[j];
while(i<j&&cow2[i].f<x.f) i++;
if(i<j) cow2[j--]=cow2[i];
}
cow2[i]=x;
qsort2(l,i-1);
qsort2(i+1,r);
}
}
poj 2010 Moo University - Financial Aid
最新推荐文章于 2020-01-27 15:39:51 发布