比赛 集训 评测结果 AAAAAAAAAA
题目名称 遵循指令之意 最终得分 100
用户昵称 秋_Water 运行时间 2.391 s
代码语言 C++ 内存使用 10.58 MiB
提交时间 2025-07-03 09:04:27
显示代码纯文本
#include <bits/stdc++.h>
#define lowbit(x) x&-x
using namespace std;
const int N=1e6+5; 
int n,a[N],b[N],ji,ou,ans[N];
struct BIT{
	int bit[N]; 
	void modif(int x,int val){
		for(int i=x;i<=n;i+=lowbit(i)){
			bit[i]+=val;
		}
	}
	int query(int x){
		int ans=0;
		for(int i=x;i;i-=lowbit(i)){
			ans+=bit[i];
		}
		return ans;
	}	
	void clear(){
		memset(bit,0,sizeof(bit));	
	}
}t;
int main(){
	freopen("sort.in","r",stdin);
	freopen("sort.out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++){
		int val;
		cin>>val;
		if(i%2==1){
			a[++ji]=val;
		}
		else{
			b[++ou]=val;
		}
	}
	int sum=0,tot=0;
	for(int i=ji;i;i--){
		sum+=t.query(a[i]-1);
		t.modif(a[i],1);
	}
	t.clear();
	for(int i=ou;i;i--){
		tot+=t.query(b[i]-1);
		t.modif(b[i],1);
	}
	sort(a+1,a+ji+1);
	sort(b+1,b+ou+1);
	ji=0,ou=0;
	for(int i=1;i<=n;i++){
		if(i%2==1){
			ans[i]=a[++ji];
		}
		else{
			ans[i]=b[++ou];
		}
	}
	if(sum%2!=tot%2){
		swap(ans[n],ans[n-2]);
	}
	for(int i=1;i<=n;i++){
		cout<<ans[i]<<" ";
	}
	
	return 0;
}