题目链接:Brute Force Sorting
#include <map>
#include <set>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = 1e6+10;
int que[maxn],a[maxn],pre[maxn],nxt[maxn],n,top;
int main(){
int T;
scanf("%d",&T);
while(T--){
top = 0;
scanf("%d",&n);
for(int i = 1;i <= n;i++){
pre[i] = i-1;
nxt[i] = i+1;
scanf("%d",&a[i]);
que[top++] = i;
}
nxt[0] = 1;
int ans = n,flag = 0;
while(1){
int cnt = 0,cur = 0,flag = 0;
while(cur < top){
int p = que[cur],num = 0;
while(nxt[p] <= n&&a[p] > a[nxt[p]]){
flag = 1;
num++;
p = nxt[p];
}
if(num){
ans -= num+1;
nxt[pre[que[cur]]] = nxt[p];
pre[nxt[p]] = pre[que[cur]];
que[cnt++] = pre[que[cur]];
}
while(que[cur] <= p&&cur < top) cur++;
}
top = cnt;
if(!flag) break;
}
printf("%d\n",ans);
int cur = 0;
while(cur <= n){
if(cur) printf("%d ",a[cur]);
cur = nxt[cur];
}
puts("");
}
return 0;
}