比赛 |
2025.9.13 |
评测结果 |
AAAAAAAAAAAAAAAAAA |
题目名称 |
The Best Lineup |
最终得分 |
100 |
用户昵称 |
Hollow07 |
运行时间 |
1.605 s |
代码语言 |
C++ |
内存使用 |
5.55 MiB |
提交时间 |
2025-09-13 09:10:46 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll T,n,a[210000];
ll f[210000];
ll m,z;
int main(){
// freopen("in.in","r",stdin);
// freopen("out.out","w",stdout);
freopen("Lineup.in","r",stdin);
freopen("Lineup.out","w",stdout);
scanf("%lld",&T);
while(T--){
scanf("%lld",&n);
f[n+1]=0;m=0;z=0;
for (int i=1;i<=n;i++) scanf("%lld",&a[i]);
for (int i=n;i>=1;i--) f[i]=max(a[i],f[i+1]);
for (int i=1;i<=n;i++){
if (f[i]==a[i]){
if (m>=f[i+1]){//取到区间的右端点,判断是否值得进行调换,若本身该区间前面的数就不会放到b中,则该调换无意义
for (int j=i;j>z+1;j--)
swap(a[j],a[j-1]);
break;
}
z=i;m=0;
}else{
m=max(m,a[i]);
}
}
for (int i=n;i>=1;i--) f[i]=max(a[i],f[i+1]);
for (int i=1;i<=n;i++){
if (a[i]==f[i]){
printf("%lld ",a[i]);
}
}
printf("\n");
}
return 0;
}