比赛 |
集训 |
评测结果 |
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;
}