第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
zmx
01 | #include<stdio.h> |
02 | void qsort(int a[], int l, int r) |
03 | { |
04 | int key = a[l], i = l, j = r; |
05 |
06 | if(l >= r) |
07 | { |
08 | return ; |
09 | } |
10 |
11 | while(i < j) |
12 | { |
13 | while(i < j && a[j] <= key) |
14 | { |
15 | j--; |
16 | } |
17 |
18 | a[i] = a[j]; |
19 |
20 | while(i < j && a[i] >= key) |
21 | { |
22 | i++; |
23 | } |
24 |
25 | a[j] = a[i]; |
26 | } |
27 |
28 | a[i] = key; |
29 | qsort(a, l, i - 1); |
30 | qsort(a, i + 1, r); |
31 |
32 | } |
33 |
34 | int main(void) |
35 | { |
36 | int n, i, a[1000001] ; |
37 | while (~scanf("%d", &n)) |
38 | { |
39 | for(i = 0; i < n; i++) |
40 | { |
41 | scanf("%d", &a[i]); |
42 | } |
43 |
44 | qsort(a, 0, n - 1); |
45 | scanf("%d" , &n); |
46 | int m ; |
47 | for (i = 0 ; i < n ; i++) |
48 | { |
49 | scanf("%d" , &m); |
50 | printf("%d\n", a[m - 1]); |
51 | } |
52 | } |
53 |
54 |
55 | return 0; |
56 | } |
57 |
58 |
59 |
本文介绍了一个关于区间查询的问题:给定一系列整数,通过快速排序算法找出特定位置上的数值。该问题要求处理大规模数据集,并能高效地返回指定位置的元素。文中提供了一个具体的实现案例,展示了如何通过递归调用快速排序来解决这一挑战。

被折叠的 条评论
为什么被折叠?



