比赛 2025.9.13 评测结果 AWWWWWWWTTTTTTTTTT
题目名称 The Best Lineup 最终得分 6
用户昵称 20120223 运行时间 37.059 s
代码语言 C++ 内存使用 14.48 MiB
提交时间 2025-09-13 11:57:39
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N = 200005;
int a[N],b[N],c[N],d[N];
string ans;
vector<int> s[N];
string Gm(int k)
{
	ans="";
	memset(a,0,sizeof(a));
	memset(b,0,sizeof(b));
	memset(c,0,sizeof(c));
	memset(d,0,sizeof(d));
	memset(s,0,sizeof(s));
	int mx=0;
	for(int i=1;i<=k;i++)
	{
		cin>>a[i];
		mx=max(mx,a[i]);
		b[i]=a[i];
		s[a[i]].push_back(i);
	}
	if(k==1)
	{
		ans=to_string(a[1]);
		return ans;
	}
	s[mx+1].push_back(0);
	b[k+1]=mx+1;
	sort(b+1,b+k+1);
	reverse(b+1,b+k+2);
	for(int i=2;i<=k+1;i++)
	{
		for(int j=0;j<s[b[i]].size();j++)
		{
			if(s[b[i-1]][s[b[i-1]].size()-1]+1<s[b[i]][j])
			{
				for(int h=1;h<=k;h++)
				{
					if(h<=s[b[i-1]][s[b[i-1]].size()-1])
					c[h]=a[h];
					else if(s[b[i-1]][s[b[i-1]].size()-1]+1==h)
					c[h]=a[s[b[i]][j]];
					else if(s[b[i]][j]+1<=h)
					c[h]=a[h];
					else
					c[h]=a[h-1];
				}
				for(int h=k;h>=1;h--)
				d[h]=max(d[h+1],c[h]);
				string f="";
				for(int h=k;h>=1;h--)
				{
					if(d[h]==c[h])
					{
					string o=to_string(c[h]);
					o=o+" ";
					f=o+f;
					}
				}
				ans=max(ans,f);
			}
		}
	}
	if(ans=="")
	for(int i=1;i<=k;i++)
	{
		string o=to_string(a[i]);
		if(i==1)ans=o;
		else
		ans=ans+" "+o;
	}
	return ans;
}
int main() {
		freopen("Lineup.in","r",stdin);	
    freopen("Lineup.out","w",stdout);
  	int t;
  	cin>>t;
  	while(t--)
  	{
  		int u;
  		cin>>u;	
  		cout<<Gm(u)<<endl;
	  }
    return 0;
}