#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<map>
#include<unordered_set>
using namespace std;
typedef long long ll;
int a[1000005];
int main()
{
int i,j,n,m,k;
long long x,y;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
if(n%2)
{
k=(n+1)/2;
nth_element(a+1,a+k,a+1+n);
printf("%d\n",a[k]);
}
else
{
k=n/2;
nth_element(a+1,a+k,a+1+n);
x=a[k];
k++;
nth_element(a+1,a+k,a+1+n);
y=a[k];
x=y+x;
x>>=1;
printf("%d\n",(int)x);
}
return 0;
}
nth_elemet作为stl类的一个求第k大的数,据说平均复杂度是o(n);
nth_element(a+1,a+k,a+1+n),从a[1]到a[n]中找第k小的数;
如果找第k大,和sort一样
bool cmp(int a,int b)
{
return a>b;
}
nth_element(a+1,a+k,a+1+n,cmp);