B. Minimize the Permutation

You are given a permutation of length nn. Recall that the permutation is an array consisting of nn distinct integers from 11 to nn in arbitrary order. For example, [2,3,1,5,4][2,3,1,5,4] is a permutation, but [1,2,2][1,2,2] is not a permutation (22 appears twice in the array) and [1,3,4][1,3,4] is also not a permutation (n=3n=3 but there is 44 in the array).

You can perform at most n−1n−1 operations with the given permutation (it is possible that you don't perform any operations at all). The ii-th operation allows you to swap elements of the given permutation on positions ii and i+1i+1. Each operation can be performed at most once. The operations can be performed in arbitrary order.

Your task is to find the lexicographically minimum possible permutation obtained by performing some of the given operations in some order.

You can see the definition of the lexicographical order in the notes section.

You have to answer qq independent test cases.

For example, let's consider the permutation [5,4,1,3,2][5,4,1,3,2]. The minimum possible permutation we can obtain is [1,5,2,4,3][1,5,2,4,3] and we can do it in the following way:

  1. perform the second operation (swap the second and the third elements) and obtain the permutation [5,1,4,3,2][5,1,4,3,2];
  2. perform the fourth operation (swap the fourth and the fifth elements) and obtain the permutation [5,1,4,2,3][5,1,4,2,3];
  3. perform the third operation (swap the third and the fourth elements) and obtain the permutation [5,1,2,4,3][5,1,2,4,3].
  4. perform the first operation (swap the first and the second elements) and obtain the permutation [1,5,2,4,3][1,5,2,4,3];

Another example is [1,2,4,3][1,2,4,3]. The minimum possible permutation we can obtain is [1,2,3,4][1,2,3,4] by performing the third operation (swap the third and the fourth elements).

Input

The first line of the input contains one integer qq (1≤q≤1001≤q≤100) — the number of test cases. Then qq test cases follow.

The first line of the test case contains one integer nn (1≤n≤1001≤n≤100) — the number of elements in the permutation.

The second line of the test case contains nn distinct integers from 11 to nn — the given permutation.

Output

For each test case, print the answer on it — the lexicograhically minimum possible permutation obtained by performing some of the given operations in some order.

Example
input

Copy
4
5
5 4 1 3 2
4
1 2 4 3
1
1
4
4 3 2 1
output

Copy
1 5 2 4 3
1 2 3 4
1
1 4 3 2
Note

Recall that the permutation pp of length nn is lexicographically less than the permutation qq of length nn if there is such index i≤ni≤n that for all jj from 11 to i−1i−1 the condition pj=qjpj=qj is satisfied, and pi<qipi<qi. For example:

  • p=[1,3,5,2,4]p=[1,3,5,2,4] is less than q=[1,3,5,4,2]q=[1,3,5,4,2] (such i=4i=4 exists, that pi<qipi<qi and for each j<ij<i holds pj=qjpj=qj),
  • p=[1,2]p=[1,2] is less than q=[2,1]q=[2,1] (such i=1i=1 exists, that pi<qipi<qi and for each j<ij<i holds pj=qjpj=qj).

选择最小的往前走。

#include<bits/stdc++.h>
using namespace std;
vector<int>p;
int pos[];
int vis[];
void solve() {
p.clear();
int n;
scanf("%d",&n);
memset(vis,,sizeof(vis));
memset(pos,,sizeof(pos));
for(int i=; i<n; i++) {
int x;
scanf("%d",&x);
p.push_back(x);//存数字
pos[x]=i;//记录每个数字的下标
}
for(int i=; i<=n; i++) {//移动最小的数字
int flag = ;
while(flag==) {
if(pos[i]>&&vis[pos[i]-]==) {//如果pos[1]=0,说明已经在一号位,就不用移动,
//如果没在一号位,他的前一位没有和他进行过交换
vis[pos[i]-]=;//那么就标记,交换过
int now=pos[i],pnow=pos[i]-;
swap(p[now],p[pnow]);//交换数字
swap(pos[p[now]],pos[p[pnow]]);//交换下标
} else {
flag=;
}
}
vis[pos[i]]=;//当目前最小的数字已经不能再交换了,那么他的位置也就不能再动,就标记
}
for(int i=; i<p.size(); i++) { //最后输出
cout<<p[i]<<" ";
}
cout<<endl; }
int main() {
int t;
scanf("%d",&t);
while(t--)solve();
}
//从后往前扫,遇到能往左边挪的就往左边挪。
//当然还有位置没有挪过,那就把没有被挪过的地方记录下来,然后再贪心把小的往左边挪。
#include<bits/stdc++.h>
using namespace std;
const int maxn = + ;
int a[maxn];
int vis[maxn];
int n;
int main() {
int T;
cin >> T;
while(T--) {
cin >> n;
for(int i = ; i <= n; i++) {
cin >> a[i];
vis[i] = ;
}
for(int i = n - ; i >= ; i--) {
if(a[i] > a[i+]) {
swap(a[i], a[i+]);
vis[i] = ;
}
}
for(int i = ; i <= n - ; i++) {
if(vis[i] == ) {
if(a[i] > a[i+])
swap(a[i], a[i+]);
}
}
for(int i = ; i <= n; i++)
printf("%d ", a[i]);
puts("");
}
return ;
}

Codeforces Round #598 (Div. 3) B Minimize the Permutation的更多相关文章

  1. Codeforces Round #598 (Div. 3) B. Minimize the Permutation 贪心

    B. Minimize the Permutation You are given a permutation of length n. Recall that the permutation is ...

  2. Codeforces Round #598 (Div. 3)- E. Yet Another Division Into Teams - 动态规划

    Codeforces Round #598 (Div. 3)- E. Yet Another Division Into Teams - 动态规划 [Problem Description] 给你\( ...

  3. 【CF1256】Codeforces Round #598 (Div. 3) 【思维+贪心+DP】

    https://codeforces.com/contest/1256 A:Payment Without Change[思维] 题意:给你a个价值n的物品和b个价值1的物品,问是否存在取物方案使得价 ...

  4. Codeforces Round #598 (Div. 3)

    传送门 A. Payment Without Change 签到. Code /* * Author: heyuhhh * Created Time: 2019/11/4 21:19:19 */ #i ...

  5. Codeforces Round #598 (Div. 3) A,B,C,D{E,F待补}

    A. Payment Without Change   #include<bits/stdc++.h> using namespace std; #define int long long ...

  6. Codeforces Round #598 (Div. 3) E. Yet Another Division Into Teams dp

    E. Yet Another Division Into Teams There are n students at your university. The programming skill of ...

  7. Codeforces Round #598 (Div. 3)E(dp路径转移)

    题:https://codeforces.com/contest/1256/problem/E 题意:给一些值,代表队员的能力值,每组要分3个或3个以上的人,然后有个评价值x=(队里最大值-最小值), ...

  8. Codeforces Round #598 (Div. 3) F. Equalizing Two Strings 构造

    F. Equalizing Two Strings You are given two strings s and t both of length n and both consisting of ...

  9. Codeforces Round #598 (Div. 3) D. Binary String Minimizing 贪心

    D. Binary String Minimizing You are given a binary string of length n (i. e. a string consisting of ...

随机推荐

  1. Chocolaty

    原文是用markdown格式写的,稍微改了下发了博客,格式可能会很奇怪.. Chocolaty官网 Chocolaty是一款Windows平台的包管理工具,类似于centos的yum或ubuntu的a ...

  2. 树hash/树哈希 刷题记录

    不同hash姿势: 树的括号序列最小表示法  s[i] 如果i为叶子节点:() 如果i的子节点为j1~jn:(s[j1]...s[jn]),注意s[j]要按照字典序排列

  3. spark-sklearn TypeError: 'JavaPackage' object is not callable

    from sklearn import svm, datasets from spark_sklearn import GridSearchCV from pyspark import SparkCo ...

  4. [CF1303E] Erase Subsequences - dp

    Solution 不由分说地枚举分割点 令 \(f[i][j]\) 表示原串处理到 \(i\) ,\(s_1\) 处理到 \(j\),\(s_2\) 最多能处理到哪里 采用主动转移 任意情况, \(f ...

  5. First Kernel-pwn

    Kernel pwn-极简题目的操作模式 完全参照M4x师傅的指导,用 hacklu的baby kernel迈了第一步 题目附带文件说明 一般题目会给出bzImage,.cpio, .sh文件 sh文 ...

  6. 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 Banana

    签到题 50的规模,随便搞搞都能过,用stl的string的搜索直接做了 #include <bits/stdc++.h> using namespace std; typedef lon ...

  7. SpringBoot之Configuration

      在SpringBoot中可以通过@Configuration对某个类注解将该类申明为配置类,以此在代替先前spring版本中配置xml中的功能,并且增加了可读性与维护性.并且在注解类中的类方法中可 ...

  8. JavaDay2(中)

    Java循环与分支练习 习题1: 输出1~100内前5个可以被3整除的数. public class Day2_Test1 { //输出1~100内前5个可以被3整除的数. public static ...

  9. 在vue项目中使用MD5.js

    1.安装 npm install --save js-md5 2.引入 import md5 from 'js-md5'; 3.使用 md5('holle') // bcecb35d0a12baad4 ...

  10. IDEA模板注释及相关快捷键设置

    IDEA模板注释及相关快捷键设置 最近使用IDEA时发现自带的模板注释不怎么好用,因此自己根据网上的教程总结了适合自己的模板设置,可以一键生成类和方法的注释,废话不多说一起看看吧: 第9步的类模板注释 ...