首页 > 代码库 > nyoj 1073 最小值
nyoj 1073 最小值
最小值
时间限制:1000 ms | 内存限制:65535 KB
难度:3
- 描述
输入N个数,M次查询。
每次查询给出一个数x。
要求:每次查询输出前x个数中第i小的数。(i为第i次查询)
你可以假设M <= N,Xi <= Xi+1 <= Xi+2 <= ……. <= Xm (Xm <= N).
- 输入
- Line0:T
Line1: N,M
Line2…LineN+1:num1,......,numN
LineN+2…LineN+2+M:x1,……,xM
N < 30000, num < 2000000000 - 输出
- 每次查询输出前i小的数,单独一行。
详细格式请参考样例。 - 样例输入
17 43 1 -4 2 8 -1000 21 2 6 6
- 样例输出
3312
AC代码:#include <stdio.h>#define inf 2000000000int a[30005];void quicksort(int left,int right);int main(){ int T,M,N,i,j,k; scanf("%d",&T); while(T--) { scanf("%d%d",&N,&M); for(i=0;i<N;i++) scanf("%d",&a[i]); for(i=0;i<M;i++) { scanf("%d",&k); quicksort(0,k-1);//快排 printf("%d\n",a[i]);//第i小值 } } return 0;}void quicksort(int left,int right){ int i,j,t,temp; if( left > right ) { return; } i = left; j = right; t = a[left]; while( i != j ) { while( a[j]>= t && i<j ) { j--; } while( a[i]<= t && i<j ) { i++; } if(i < j) { temp = a[i]; a[i] = a[j]; a[j] = temp; } } a[left] = a[i]; a[i] = t; quicksort(left,i-1); quicksort(i+1,right); return;}
优化代码下次更新..
nyoj 1073 最小值
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。