测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A31061. 区间排序

填空题 较难

题目描述

区间排序

题目描述

小杨有一个包含n个正整数的序列a。

小杨计划对序列进行多次升序排序,每次升序排序小杨会选择一个区间[l,r](l≤r)并对区间内所有数字,即al,al+1,,,ar进行升序排序。每次升序排序会在上一次升序排序的结果上进行。

小杨想请你计算出多次升序排序后的序列。

输入格式

第一行包含一个正整数n,含义如题目所示。

第二行包含n个正整数 ,al,al+1,,,an代表序列。

第三行包含一个正整数 ,代表排序次数。

之后q行,每行包含两个正整数li,ri,代表将区间[li,ri]内所有数字进行升序排序。 

输出格式

输出一行包含n个正整数,代表多次升序排序后的序列。

样例1

输入

5

3 4 5 2 1

3

4 5

3 4

1 3

输出

1 3 4 5 2 1

第一次升序排序后,序列为[3,4,5,1,2];

第二次升序排序后,序列为[3,4,1,5,2];

第三次升序排序后,序列为[1,3,4,5,2];

对于全部数据,保证有1≤n≤100,1≤ai≤100,1≤q≤100,1≤li≤ri≤n。

参考答案

#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"; } }
上一题 下一题