7617:输出前k大的数
- 总时间限制:
- 10000ms
- 单个测试点时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
给定一个数组,统计前k大的数并且把这k个数从大到小输出。
- 输入
- 第一行包含一个整数n,表示数组的大小。n < 100000。
第二行包含n个整数,表示数组的元素,整数之间以一个空格分开。每个整数的绝对值不超过100000000。
第三行包含一个整数k。k < n。 - 输出
- 从大到小输出前k大的数,每个数一行。
- 样例输入
-
10 4 5 6 9 8 7 1 2 3 0 5
- 样例输出
-
9 8 7 6 5
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<cmath> using namespace std; int a[10000005],b[10006]; void msort(int s,int t) { int mid=a[(s+t)/2]; int i=s,j=t; do { while(a[i]>mid)i++; while(a[j]<mid)j--; if(i<=j) { swap(a[i],a[j]);i++;j--; } }while(i<=j); if(s<j)msort(s,j); if(i<t)msort(i,t); } int main() { int n,k; cin>>n; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } scanf("%d",&k); msort(1,n); for(int i=1;i<=k;i++) { printf("%d ",a[i]); } return 0; }