此题仅为堆排序的练习题——其实不用堆直接QSORT也可以——为最短路径做准备 :)
/*
* POJ-2388 who's in the middle
* mike-w
* 2011-08-16
* PS: 这也许本不是一道堆排序题,不过我用此题练习一下堆排序 ;)
*/
#include<stdio.h>
#define MAX_SIZE 10101
long heap[MAX_SIZE]; /* heap[0] indicates the number of totla elements */
long N;
long swap(long *t1,long *t2)
{
long t3=*t1;
*t1=*t2;
*t2=t3;
return 0;
}
int insert(long e)
{
long n=++heap[0];
heap[n]=e;
while(heap[n]>heap[n/2]&&n>1)
swap(heap+n,heap+n/2),n/=2;
return 0;
}
long pop(void)
{
long ret=heap[1];
swap(heap+1,heap+*heap);
*heap-=1;
long n=1,t;
while( (t=n<<1)<=*heap)
if(t+1<=*heap && heap[t+1]>heap[t] && heap[n]<heap[t+1])
swap(heap+n,heap+t+1),n=t+1;
else if(heap[n]<heap[t])
swap(heap+n,heap+t),n=t;
else
break;
return ret;
}
int main(void)
{
#ifndef ONLINE_JUDGE
freopen("2388.in","r",stdin);
#endif
scanf("%ld",&N);
long i,t1;
for(i=0;i<N;i++)
{
scanf("%ld",&t1);
insert(t1);
}
for(i=0;i<N/2;i++)
pop();
printf("%ld\n",pop());
return 0;
}