记录编号 605970 评测结果 AAAAAAAAAAAAAAAAAA
题目名称 4175.[USACO25 Feb Silver]The Best Lineup 最终得分 100
用户昵称 GravatarHollow07 是否通过 通过
代码语言 C++ 运行时间 1.779 s
提交时间 2025-09-13 14:47:12 内存使用 5.54 MiB
显示代码纯文本
#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;
}