比赛 |
2025.9.13 |
评测结果 |
AAAAAAAAAAAAAAAAAA |
题目名称 |
The Best Lineup |
最终得分 |
100 |
用户昵称 |
左清源 |
运行时间 |
2.307 s |
代码语言 |
C++ |
内存使用 |
13.04 MiB |
提交时间 |
2025-09-13 10:41:07 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int T,n,a[N],st[N][21],len[N];
vector<int>vec[N],ans;
int qry(int l,int r){
int v=0;
for(int i=l;i<=r;i++){
v=max(v,a[i]);
}
return v;
}
void work(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",a+i);st[0][i]=a[i];
vec[a[i]].push_back(i);
}
int lim=0;
ans.clear();
ans.push_back(0);
for(int i=n;i>=1;i--){
if(!vec[i].size())continue;
for(int j:vec[i]){
if(j>lim){
ans.push_back(j);
lim=j;
}
}
}
int len=ans.size()-1;
bool f=1;
for(int i=1;i<len;i++){
if(a[ans[i]]!=a[ans[i+1]]){
//cout<<qry(ans[i-1]+1,ans[i]-1)<<endl;
if(qry(ans[i-1]+1,ans[i]-1)>=a[ans[i+1]]){
int x=a[ans[i]];
for(int j=ans[i]-1;j>=ans[i-1];j--){
a[j+1]=a[j];
}
a[ans[i-1]+1]=x,f=0;
break;
}
}
}
if(f){
int x=a[ans[len]];
for(int j=ans[len]-1;j>ans[len-1];j--){
a[j+1]=a[j];
}
a[ans[len-1]+1]=x;
}
ans.clear();
for(int i=1;i<=n;i++)vec[i].clear();
for(int i=1;i<=n;i++)vec[a[i]].push_back(i);
lim=0;
for(int i=n;i>=1;i--){
if(!vec[i].size())continue;
for(int j:vec[i]){
if(j>lim){
ans.push_back(j);
lim=j;
}
}
}
for(auto v:ans){
printf("%d ",a[v]);
}
ans.clear();
for(int i=1;i<=n;i++)vec[i].clear();
printf("\n");
return;
}
int main(){
freopen("Lineup.in","r",stdin);
freopen("Lineup.out","w",stdout);
scanf("%d",&T);
while(T--)work();
return 0;
}