1060.找第K大数
Time Limit: 1000 MS Memory Limit: 32768 KB
Description
给定 n(1 <= n <= 10000000) 个正整数(<= 2147483647),找出其中的第K(1 <= K <= 10)大数。
Input
第一行,两个整数n, K,第二行n个整数
Output
第K大数
Sample Input
5 3 10 15 6 8 3
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; }