第X大的数

来源:互联网 发布:fifaonline3刷球员软件 编辑:程序博客网 时间:2024/04/30 13:13


第X大的数


Time Limit: 1000MS Memory Limit: 65536KB
SubmitStatistic

Problem Description

X最近爱上了区间查询问题,给出N (N <= 100000) 个数,然后进行M (M <= 5) 次询问,每次询问时,输入一个数X (1 <= X <= N),输出N个数中第X大的数。

Input

多组输入。

每组首先输入一个整数N,代表有N个数,下面一行包含N个整数,用空格隔开。然后为一个整数M,代表有M次询问,下面的M行,每行一个整数X。

Output

输出N个数中第X大的数。

Example Input

41 2 2 341234

Example Output

3221

Hint

Author

 zmx 

  #include <stdio.h>#include <stdlib.h>#include <string.h>int qort(int a[],int left ,int right){    int x=a[left],i=left,j=right;    while(i<j)    {        while(i<j&&a[j]<=x)j--;  ///遇到后才换        a[i]=a[j];  /// 前移        while(i<j&&a[i]>=x)i++;        a[j]=a[i];  /// 后移    }    a[i]=x;    return i;}int find_k(int a[],int left ,int right, int k){    int y;    if(left<=right)    {        y=qort(a,left,right);///一次划分函数        if(y==k)            return a[y];        if(y<k)            return (find_k(a,y+1,right,k));       else            return (find_k(a,left,y-1,k));    }}int main(){    int i,n,m,a[10001],k,x;    while(~scanf("%d",&n))    {        for(i=1; i<=n; i++)            scanf("%d",&a[i]);          scanf("%d",&m);          while(m--)          {              scanf("%d",&k);              x=find_k(a,1,n,k);              printf("%d\n",x);          }    }    return 0;}

0 0
原创粉丝点击