本道题的思路很简单,读入数组后,按照要求把给定的 L -> R 区间中的值全部取出来,然后做一个排序。
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 1000 + 5;
int num[MAXN], subNum[MAXN];
int n, m;
int l, r, k;
int i, j;
int main(){
cin >> n;
for(i = 0; i < n; i++){
cin >> num[i];
}
cin >> m;
while(m--){
cin >> l >> r >> k;
for(j = 0, i = (l-1); i < r; j++, i++){
subNum[j] = num[i];
}
sort(subNum, subNum + j, greater<int>()); // 注意这里的greater的用法,如果是要从小到大,则使用less<int>()
cout << subNum[k-1] << endl;
}
return 0;
}
当然,要注意的是这里面使用了算法头文件<algorithm>,里面有一个排序函数叫做sort(),具体的用法在程序里面已经说过了,在这里就不用赘述了。
但是,我们要知道的是,这个头文件是C++自己的头文件,而C语言中也有一个算法头文件“algorithm.h”,我们知道C++兼容C语言的语法,那么这两个头文件中的排序函数都有什么区别呢?
- C语言中的算法头文件中的排序函数是qsort()其内部实现是快速排序,不论在C/C++中引用它都是直接引用"algorithm.h"。
- 而C++语言中的算法头文件中的排序函数是sort(),其可以根据你数据的特点选择不同的排序函数,要引用它则需要使用<algorithm>