SDUT 2748 第X大的数

来源:互联网 发布:网络kn什么意思 编辑:程序博客网 时间:2024/06/06 08:27

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 <iostream>using namespace std;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(cin >> n){for(i = 1;i<=n;i++)cin >> a[i];cin >> t;while(t--){cin >> k;m = f(a,1,n,k);cout << m << endl;}}return 0;}


原创粉丝点击