记录编号 |
602322 |
评测结果 |
AAAAAAAAAA |
题目名称 |
4166.遵循指令之意 |
最终得分 |
100 |
用户昵称 |
惊世猴人 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
1.345 s |
提交时间 |
2025-07-03 15:51:01 |
内存使用 |
6.17 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,a[500001],b[500001],c[500001],ans1,ans2;
void gb1(int l,int r){
if(l==r)return;
int mid=l+r>>1,i=l,j=mid+1,k=l;
gb1(l,mid);
gb1(j,r);
while(i<=mid&&j<=r){
if(a[i]<=a[j])c[k++]=a[i++];
else c[k++]=a[j++],ans1+=(mid-i+1);
}
while(i<=mid)c[k++]=a[i++];
while(j<=r)c[k++]=a[j++];
for(int x=l;x<=r;x++)a[x]=c[x];
}
void gb2(int l,int r){
if(l==r)return;
int mid=l+r>>1,i=l,j=mid+1,k=l;
gb2(l,mid);
gb2(j,r);
while(i<=mid&&j<=r){
if(b[i]<=b[j])c[k++]=b[i++];
else c[k++]=b[j++],ans2+=(mid-i+1);
}
while(i<=mid)c[k++]=b[i++];
while(j<=r)c[k++]=b[j++];
for(int x=l;x<=r;x++)b[x]=c[x];
}
int main(){
freopen("sort.in","r",stdin);
freopen("sort.out","w",stdout);
cin>>n;
for(int i=1;i<=n/2;i++){
scanf("%d%d",&a[i],&b[i]);
}
if(n&1)cin>>a[n+1>>1];
gb1(1,n+1>>1);
gb2(1,n>>1);
sort(a+1,a+(n+1>>1)+1);
sort(b+1,b+(n>>1)+1);
// cout<<ans1<<' '<<ans2<<'\n';
if(ans1%2==ans2%2){
for(int i=1;i<=n>>1;i++){
printf("%d %d ",a[i],b[i]);
}
if(n&1)cout<<a[n+1>>1];
}else{
if(n&1)swap(a[n+1>>1],a[(n+1>>1)-1]);
else swap(b[n>>1],b[(n>>1)-1]);
for(int i=1;i<=n>>1;i++){
printf("%d %d ",a[i],b[i]);
}
if(n&1)cout<<a[n+1>>1];
}
fclose(stdin);
fclose(stdout);
return 0;
}