遞迴-第X大的數

HowieLee59發表於2019-03-30

Problem Description

X最近愛上了區間查詢問題,給出N (N <= 100000) 個數,然後進行M (M <= 50) 次詢問,每次詢問時,輸入一個數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
#include<stdio.h>
#include<stdlib.h>

int a[100001];

void sort(int l,int r){//快排的思想
    int key = a[l];
    int i = l,j = r;
    while(i < j){
        while(i < j && key >= a[j]){
            j--;
        }
        a[i] = a[j];
        while(i < j && key <= a[i]){
            i++;
        }
        a[j] = a[i];
    }
    a[i] = key;
    if(l < r){
        sort(l,i-1);
        sort(i+1,r);
    }
}

int main(){
    int b,c,d;
    while(~scanf("%d",&b)){
        for(int i = 0 ; i < b ; i++){
            scanf("%d",&a[i]);
        }
        sort(0,b-1);
        scanf("%d",&c);
        while(c--){
            scanf("%d",&d);
            printf("%d\n",a[d-1]);
        }
    }
    return 0;
}

 

相關文章