第X大的数
Time Limit: 1000 ms
Memory Limit: 65536 KiB
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大的数。
Sample Input
4 1 2 2 3 4 1 2 3 4
Sample Output
3 2 2 1
Hint
Source
#include<stdio.h>#define N 100010
int sort(int a[], int l, int r)
{
int x = a[l];
//int m = r;
while(l < r)
{
while(l < r && a[r] <= x)r--;
a[l] = a[r];
while(l < r && a[l] >= x)l++;
a[r] = a[l];
}
a[l] = x;
return l;
}
int find(int a[], int left, int right, int k)
{
int y;
if(left <= right)
{
y = sort(a, left, right);
if(y == k)
return a[y];
if(y > k)return find(a, left, y - 1, k);
else return find(a, y + 1, right, k);
}
}
int main()
{
int n, m, i, k, a[N];
while(~scanf("%d", &n))
{
for(i = 0; i <= n - 1; i++)
{
scanf("%d", &a[i]);
}
scanf("%d", &m);
while(m--)
{
int x;
scanf("%d", &x);
k = find(a, 0, n - 1, x - 1);
printf("%d\n", k);
}
}
return 0;
}
zmx