比赛 集训 评测结果 AAAAAAAAAA
题目名称 遵循指令之意 最终得分 100
用户昵称 彭欣越 运行时间 1.405 s
代码语言 C++ 内存使用 17.53 MiB
提交时间 2025-07-03 10:52:26
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1000010;
ll n,n1,n2,a[N],a1[N],a2[N],c[N],ans1,ans2;
void msort1 (int l,int r) {
    if (l==r) return;
    ll mid=(l+r)/2;
    msort1(l,mid);
	msort1(mid+1,r);
	ll ll=l,rr=mid+1,sum=l;
    while (ll<=mid&&rr<=r) {
    	if (a1[ll]<=a1[rr]) c[sum++]=a1[ll++];
    	else c[sum++]=a1[rr++],ans1+=mid-ll+1;
	}
    while (ll<=mid) c[sum++]=a1[ll++];
    while (rr<=r) c[sum++]=a1[rr++];
    for (int i=l;i<=r;i++) a1[i]=c[i];
} 
void msort2 (int l,int r) {
    if (l==r) return;
    ll mid=(l+r)/2;
    msort2(l,mid);
	msort2(mid+1,r);
	ll ll=l,rr=mid+1,sum=l;
    while (ll<=mid&&rr<=r) {
    	if (a2[ll]<=a2[rr]) c[sum++]=a2[ll++];
    	else c[sum++]=a2[rr++],ans2+=mid-ll+1;
	}
    while (ll<=mid) c[sum++]=a2[ll++];
    while (rr<=r) c[sum++]=a2[rr++];
    for (int i=l;i<=r;i++) a2[i]=c[i];
} 
int main () {
	freopen("sort.in","r",stdin);
	freopen("sort.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0); 
	cin >> n;
	for (int i=1;i<=n;i++) cin >> a[i];
	for (int i=1;i<=n;i++) {
		if (i%2==1) a1[++n1]=a[i];
		else a2[++n2]=a[i];
	}
	msort1(1,n1);
	memset(c,0,sizeof(c));
	msort2(1,n2);
	if (ans1%2==ans2%2) {
		//if (n%2==0) swap(a2[n2],a2[n2-1]);
		//else swap(a1[n1],a1[n1-1]);
		for (int i=1;i<=n;i++) {
			if (i%2==1) cout << a1[i/2+1] <<' ';
			else cout << a2[i/2] <<' ';
		}
	}else{
		if (n%2==0) swap(a2[n2],a2[n2-1]);
		else swap(a1[n1],a1[n1-1]);
		for (int i=1;i<=n;i++) {
			if (i%2==1) cout << a1[i/2+1] <<' ';
			else cout << a2[i/2] <<' ';
		}
	}
	return 0;
}