比赛 集训 评测结果 AAAAAAAAAA
题目名称 遵循指令之意 最终得分 100
用户昵称 KKZH 运行时间 2.407 s
代码语言 C++ 内存使用 12.07 MiB
提交时间 2025-07-03 11:32:21
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
int a[1000010],b[1000010],n;
int c[500010];
long long ans,ans1;
void msort(int d,int e){
    if(d==e) return;
    int mid=(d+e)/2,i=d,j=mid+1,k=d;
    msort(d,mid);
    msort(mid+1,e);
    while(i<=mid&&j<=e)
        if(a[i]<=a[j])
            c[k++]=a[i++];
        else
            c[k++]=a[j++],ans +=mid - i+1;
    while(i<=mid)
        c[k++]=a[i++];
    while(j<=e)
        c[k++]=a[j++];
    for(int l=d;l<=e;l++)
        a[l]=c[l];
}
void msort1(int d,int e){
    if(d==e) return;
    int mid=(d+e)/2,i=d,j=mid+1,k=d;
    msort1(d,mid);
    msort1(mid+1,e);
    while(i<=mid&&j<=e)
        if(b[i]<=b[j])
            c[k++]=b[i++];
        else
            c[k++]=b[j++],ans1 +=mid - i+1;
    while(i<=mid)
        c[k++]=b[i++];
    while(j<=e)
        c[k++]=b[j++];
    for(int l=d;l<=e;l++)
        b[l]=c[l];
}

int main(){
	freopen("sort.in","r",stdin);
	freopen("sort.out","w",stdout);
    memset(a,-1,sizeof(a));
    memset(b,-1,sizeof(b));
    cin>>n;
    int len_a=n/2;
    int len_b=(n+1)/2;
    for(int i=1;i<=n;i++){
        if(i%2==0)
            cin>>a[i/2];
        else
            cin>>b[(i+1)/2];
    }
    ans=0;
    if(len_a>0) msort(1,len_a);
    ans1=0;
    if(len_b>0) msort1(1,len_b);

    if(ans%2!=ans1%2){
        if(n%2==1)
            swap(b[len_b-1],b[len_b]);
        else
            swap(a[len_a - 1],a[len_a]);
    }
    for(int i=1;i<=len_b;i++){
        cout<<b[i]<< " ";
        if(i<=len_a){
            cout<<a[i]<< " ";
        }
    }
    return 0;
}