每日刷题(五十四)
ALGO-1、区间k大数查询
这个题还是蛮简单的,数据也不大,可以用int就可以解决,定义一个a[n + 1]数组,然后在m次循环里,定义一个r - l + 1长度的数组b,如果然后把a数组第l到第r数依次赋给数组b,然后定义一个排序函数,得到由大到小排序的数组b,然后输出第k大的数也就是b[k - 1]
详细C代码如下:
#include<stdio.h>
void sort(int a[], int n)
{
int i, j, t = 0;
for(i = 0; i < n - 1; i++)
{
for(j = i + 1; j < n; j++)
{
if(a[i] < a[j])
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
}
int main()
{
int n;
scanf("%d", &n);
int a[n + 1];
int m;
int l, r, k;
int i;
for(i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
}
scanf("%d", &m);
for(i = 0; i < m; i++)
{
scanf("%d %d %d", &l, &r, &k);
int b[r - l + 1];
int j;
int v = 0;
for(j = l; j <= r; j++)
{
b[v++] = a[j];
}
sort(b, r - l + 1);
printf("%d\n", b[k - 1]);
}
return 0;
}
样例运行结果如下: