Time Limit: 1000 MS Memory Limit: 32768 KB
Description
给定 n(1 <= n <= 10000000) 个正整数(<= 2147483647),找出其中的第K(1 <= K <= 10)大数。
Input
Output
Sample Input
Sample Output
8
#include<iostream>
#include<cstring>
#include<stdio.h>
using namespace std;
int n,k;
int dui[101];
void duipa(int i)
{
int t1=2*i;
int t2=t1+1;
int pos,temp;
if(t1>k) return;
else
{
if(t2>k)
pos=t2;
else
pos=dui[t1]>dui[t2]?t2:t1;
if(dui[i]>dui[pos])
{
temp=dui[i];
dui[i]=dui[pos];
dui[pos]=temp;
duipa(pos);
}
}
}
void create()
{
int pos=k/2;
int i;
for(i=pos; i>=1; i--)
duipa(i);
}
int main()
{
int i,tmp;
scanf("%d%d",&n,&k);
for(i=1; i<=k; i++)
scanf("%d",&dui[i]);
create();
for(i=k+1; i<=n; i++)
{
scanf("%d",&tmp);
if(tmp>dui[1])
{
dui[1]=tmp;
duipa(1);
}
}
printf("%d\n",dui[1]);
return 0;
}