第X大的数
Time Limit: 1000MS
Memory Limet
Problem Description
X最近爱上了区间查询问题,给出N(N <= 200)个数,然后进行M次询问,每次询问时,输入一个数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
Hint
代码如下:
注:之前用冒泡排序做这道题,由于又新加了数据,因此再用冒泡排序便无法处理过大的数据,为了防止超时,所以改进用快速排序的方法来A这道题。
#include<stdio.h>
#include<stdlib.h>
int F(int a[],int low,int high)
{
int x=a[low];
while(low<high)
{
while(low<high&&a[high]<=x)
high--;
a[low]=a[high];
while(low<high&&a[low]>=x)
low++;
a[high]=a[low];
}
a[low]=x;
return low;
}
void sort(int a[],int left,int right)
{
int m;
if(left<right)
{
m=F(a,left,right);
sort(a,left,m-1);
sort(a,m+1,right);
}
}
int main()
{
int n,i,m,x;
int a[100100];
while(~scanf("%d",&n))
{
for(i=0; i<n; i++)
{
scanf("%d",&a[i]);
}
sort(a,0,n-1);
scanf("%d",&m);
while(m--)
{
scanf("%d",&x);
printf("%d\n",a[x-1]);
}
}
return 0;
}