给定一串数字,求固定区间的第N大数。
因为区间是固定的,是不可以预处理的,所以每有一个区间就拿出这些数字排序,然后输出第N大的数即可
memcpy(b, a+l, sizeof(int)*size);
这句的意思是:从a数组第l项开始,拿出size个数字,sizeof的意思是开辟空间,每个空间的大小为int,然后把拿出来的数字放入b数组。
cmp这个函数是定义排序的方式,是由小到大还是由大到小
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN = 1000005;
int a[MAXN], b[MAXN];
bool cmp(int a, int b){
return a > b;
}
int main() {
int n;
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i];
int t;
cin >> t;
while(t--) {
int l, r, m;
cin >> l >> r >> m;
int size = r - l + 1;
memcpy(b, a+l, sizeof(int)*size);
sort(b, b+size, cmp);
cout << b[m-1] << endl;
}
return 0;
}