题目
现在有N个数,先将数组中的第 到第 的数字按从小到大的顺序排序。再将数组中第 到第 的数字按从大到小的顺序排序。
输入格式
第一行输入 5 个整数 ,,,,,其中 0 < < <, 0 < < <,这五个数不超过10000;
第二行为 N 个整数。
输出格式
一行N个整数,表示数组排序后的结果,数字之间用空格隔开,末尾换行。
代码
#include<bits/stdc++.h>
using namespace std;
int arr[10010];
bool judge_1(int a, int b){
return a > b;
}
int main(){
int N, l1, r1, l2, r2;
cin >> N >> l1 >> r1 >> l2 >> r2;
for(int i = 0; i < N; i++){
cin >> arr[i];
}
sort(arr + l1 - 1, arr + r1);
sort(arr + l2 - 1, arr + r2, judge_1);
for(int i = 0; i < N; i++){
cout << arr[i];
if(i != N - 1)
cout << " ";
}
return 0;
}
这题目有一个比较小的易错点,使用 sort() 排序,我们要注意一下函数的参数:
- 第一个是要排序的数组的起始地址。
- 第二个是结束的地址(最后一位要排序的地址)
- 第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。
因此这里,第K个数的起始地址为 arr + K - 1。