题目来源:
https://www.luogu.com.cn/problem/B4041
题目描述
小杨有一个包含 n 个正整数的序列 a。
小杨计划对序列进行多次升序排序,每次升序排序小杨会选择一个区间 l,r(l≤r)并对区间内所有数字,即进行升序 al,al+1,...ar 排序。每次升序排序会在上一次升序排序的结果上进行。
小杨想请你计算出多次升序排序后的序列。
输入格式
第一行包含一个正整数 n,含义如题面所示。
第二行包含 n 个正整数 a1,a2,...an,代表序列 a。
第三行包含一个正整数 q,代表排序次数。
之后 q 行,每行包含两个正整数 l,r,代表将区间 li,ri 内所有数字进行升序排序。
输出格式
输出一行包含 n 个正整数,代表多次升序排序后的序列。
输入输出样例
输入 #1
5
3 4 5 2 1
3
4 5
3 4
1 3
输出 #1
1 3 4 5 2
说明/提示
样例 1 解释
- 第一次升序排序后,序列为 3,4,5,1,2;
- 第二次升序排序后,序列为 3,4,1,5,2;
- 第三次升序排序后,序列为 1,3,4,5,2;
数据规模与约定
对于全部的测试数据,保证 1≤n,ai,q≤100,1≤li≤ri≤n。
这道题是一道经典的排序问题,只要利用好sort这个终极杀招,四级的普通排序不是问题(当然如果是要手搓冒泡,插入,选择之类也不能偷懒)。
代码如下:
cpp
#include<bits/stdc++.h>
using namespace std;
int a[110];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
int q;
cin>>q;
for(int j=1;j<=q;j++){
int l,r;
cin>>l>>r;
sort(a+l,a+1+r);
}
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
return 0;
}
如果想要的话,我可以单独整一期关于排序的(想要评论)。