- 总时间限制: 10000ms单个测试点时间限制:1000ms内存限制:65536kB(noi)
- 描述
-
给定一个数组,统计前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<algorithm> using namespace std; int a[100010]; void qsort(int l,int r) { int i=l,j=r,mid=a[(l+r)/2]; do{ while (a[i]>mid) i++; while (a[j]<mid) j--; if (i<=j) { int tmp=a[i]; a[i]=a[j]; a[j]=tmp; i++; j--; } }while (i<=j); if (i<r) qsort(i,r); if (l<j) qsort(l,j); } int main() { int n,k; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); scanf("%d",&k); qsort(0,n-1); for (int j=0;j<k;j++) printf("%d ",a[j]); return 0; }
当时也是懵了