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
4 1 2 2 3 4 1 2 3 4
Example Output
3 2 2 1
正确答案:
#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; }