比赛 2025.9.13 评测结果 AWWWWWWWWWEWWWWWWA
题目名称 The Best Lineup 最终得分 11
用户昵称 彭欣越 运行时间 3.361 s
代码语言 C++ 内存使用 43.34 MiB
提交时间 2025-09-13 09:45:25
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1000010;
int T,n,mx,cx,ci,a[N],t[N],tb[N],s[N],mk[N];
vector<int>v[N];
int main () {
	freopen("Lineup.in","r",stdin);
	freopen("Lineup.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin >> T;
	while (T--) {
		int flag=0;
		mx=0;
		memset(mk,0,sizeof(mk));
		memset(t,0,sizeof(t));
		memset(s,0,sizeof(s));
		cin >> n;
		for (int i=1;i<=n;i++) {
			cin >> a[i];
			mx=max(mx,a[i]);
			t[a[i]]++,tb[a[i]]++;
			//mp[a[i]]=i;
			v[a[i]].push_back(i);
		}
		for (int i=n-1;i>0;i--) s[i]+=s[i+1]+t[i+1];
		cx=mx-1;
		while (t[cx]==0&&cx>0) cx--;
		ci=v[cx][tb[cx]-t[cx]];
		for (int i=1;i<=n;i++) {
			//cout << mx <<endl;
			if (mk[i]) {
				//cout << 1 <<endl;
				continue;
			}
			if (flag&&a[i]<mx||a[i]<cx) {
				t[a[i]]--;
				continue;
			}
		    if (s[a[i]]==0||mx==a[i]||flag) {
		    	cout << a[i] <<' ';
		    	t[a[i]]--;
		    	//cout << t[a[i]] <<' '<< a[i] <<endl;
		    	while (t[mx]==0&&mx>0) mx--;
		    	cx=mx-1;
				while (t[cx]==0&&cx>0) cx--;
		    	continue;
			}
			mk[v[mx][tb[mx]-t[mx]]]=1;
			t[mx]--,t[a[i]]--,flag=1;
			int sum=mx;
			while (t[mx]==0&&mx>0) mx--;
			cx=mx-1;
			while (t[cx]==0&&cx>0) cx--;
			if (mx>a[i]) cout << sum <<' ';
		    else cout << sum <<' '<< a[i] <<' ';
		}
		cout <<endl;
	}
	return 0;
}