第X大的数字

来源:互联网 发布:初学编程用什么电脑 编辑:程序博客网 时间:2024/04/30 11:10

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
快拍思想 
不需要全部排好顺序 也不需要知道其他的数字
代码如下   
#include<stdio.h>int a[100010];int f(int a[],int left,int right,int k){    int i ,j , x;    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;    if(i==k)        return a[k];    else if(i>k)      return f(a,left,i-1,k);      else return f(a,i+1,right,k);}int main(){    int i , n , m ,t,k;    while(scanf("%d",&n)!=EOF)    {        for(i = 1;i<=n;i++)            scanf("%d",&a[i]);       scanf("%d",&t);       while(t--)     {        scanf("%d",&k);        m = f(a,1,n,k);        printf("%d\n",m);     }    }    return 0;}
0 0
原创粉丝点击