比赛 |
集训 |
评测结果 |
AAAAAAAAAA |
题目名称 |
遵循指令之意 |
最终得分 |
100 |
用户昵称 |
淮淮清子 |
运行时间 |
2.354 s |
代码语言 |
C++ |
内存使用 |
11.40 MiB |
提交时间 |
2025-07-03 10:48:31 |
显示代码纯文本
#include<iostream>
#include<cstring>
using namespace std;
#define ll long long
const int MAXN = 1000005;
ll n;
ll a[MAXN];
ll odd[MAXN], even[MAXN];
ll tot1 = 0, tot2 = 0;
ll ans1 = 0, ans2 = 0;
void merge1(ll l, ll mid, ll r){
ll i = l, j = mid + 1, k = 0;
ll tmp[r - l + 1];
while(i <= mid && j <= r){
if (odd[i] <= odd[j]){
tmp[k ++] = odd[i ++];
}
else{
tmp[k ++] = odd[j ++];
ans1 += mid - i + 1;
}
}
while(i <= mid){
tmp[k ++] = odd[i ++];
}
while(j <= r){
tmp[k ++] = odd[j ++];
}
for(i = l, k = 0;i <= r;i ++, k ++){
odd[i] = tmp[k];
}
}
void qsort1(ll l, ll r){
if (l >= r) return;
ll mid = (l + r) / 2;
qsort1(l, mid);
qsort1(mid + 1, r);
merge1(l, mid, r);
}
void merge2(ll l, ll mid, ll r){
ll i = l, j = mid + 1, k = 0;
ll tmp[r - l + 1];
while(i <= mid && j <= r){
if(even[i] <= even[j]){
tmp[k ++] = even[i ++];
}
else {
tmp[k ++] = even[j ++];
ans2 += mid - i + 1;
}
}
while(i <= mid){
tmp[k ++] = even[i ++];
}
while(j <= r){
tmp[k ++] = even[j ++];
}
for(i = l, k = 0; i <= r;i ++, k ++){
even[i] = tmp[k];
}
}
void qsort2(ll l, ll r){
if (l >= r) return;
ll mid = (l + r) / 2;
qsort2(l, mid);
qsort2(mid + 1, r);
merge2(l, mid, r);
}
int main(){
freopen("sort.in", "r", stdin);
freopen("sort.out", "w", stdout);
cin >> n;
for(int i = 1;i <= n;i ++){
cin >> a[i];
if (i % 2 == 0){
even[++ tot2] = a[i];
}
else{
odd[++ tot1] = a[i];
}
}
qsort1(1, tot1);
qsort2(1, tot2);
int index1 = 0, index2 = 0;
if((ans1 % 2) == (ans2 % 2)){
for(int i = 1;i <= n;i ++){
if(i % 2){
cout << odd[++ index1] << ' ';
}
else{
cout << even[++ index2] << ' ';
}
}
}
else{
for(int i = 1;i <= n;i ++){
if(i % 2){
a[i] = odd[++ index1];
}
else{
a[i] = even[++ index2];
}
}
swap(a[n], a[n - 2]);
for(int i = 1;i <= n;i ++){
cout << a[i] << ' ';
}
}
return 0;
}