4645: 【GESP2409四级】区间排序
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:1
解决:1
题目描述
⼩杨有⼀个包含$n$ 个正整数的序列$a_i$ 。
小杨计划对序列进行多次升序排序,每次升序排序小杨会选择一个区间[$l$,$r$]($l\le r$ )并对区间内所有数字,即$a_l,a_{l+1},...,a_r$进行升序排序。每次升序排序会在上一次升序排序的结果上进行。
小杨想请你计算出多次升序排序后的序列。
小杨计划对序列进行多次升序排序,每次升序排序小杨会选择一个区间[$l$,$r$]($l\le r$ )并对区间内所有数字,即$a_l,a_{l+1},...,a_r$进行升序排序。每次升序排序会在上一次升序排序的结果上进行。
小杨想请你计算出多次升序排序后的序列。
输入
第一行包含一个正整数$n$ ,含义如题面所示。
第二行包含$n$ 个正整数$a_1,a_2,...,a_n$ ,代表序列。
第三行包含一个正整数$q$ ,代表排序次数。
之后$q$ 行,每行包含两个正整数$l_i$ ,$r_i$ ,代表将区间[$l_i$,$r_i$] 内所有数字进行升序排序。
第二行包含$n$ 个正整数$a_1,a_2,...,a_n$ ,代表序列。
第三行包含一个正整数$q$ ,代表排序次数。
之后$q$ 行,每行包含两个正整数$l_i$ ,$r_i$ ,代表将区间[$l_i$,$r_i$] 内所有数字进行升序排序。
输出
输出一行包含$n$ 个正整数,代表多次升序排序后的序列。
样例输入 复制
5
3 4 5 2 1
3
4 5
3 4
1 3
样例输出 复制
1 3 4 5 2
提示
#include<bits/stdc++.h>
using namespace std;
const int N = 1010;
int a[N];
int n;
void bubbleSort(int l, int r) {
bool flag = true;
while (flag) {
flag = false;
for (int i = l; i < r; ++i) {
if (a[i] > a[i + 1]) {
flag = true;
swap(a[i], a[i + 1]);
}
}
}
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
int q;
cin >> q;
while (q--) {
int l, r;
cin >> l >> r;
bubbleSort(l, r);
}
for (int i = 1; i <= n; i++) {
cout << a[i];
if (i != n) cout << " ";
else cout << "\n";
}
}