代码如下,5个测试点都提示RE
#include<iostream>
#include<cstring>
using namespace std;
const int MAXN = 10000005;
long long int ns[MAXN],gap[40];
void swap(int &a,int &b){
int temp = a;
a = b;
b = temp;
}
int main(){
memset(ns,0,sizeof(ns));
gap[0] = 1;
for(int i = 1;i < 40;i++){
gap[i] = gap[i-1] * 2 + 1;
}
int n;
cin >> n;
for(int i = 0;i < n;i++){
cin >> ns[i];
}
for(int x = n;x >= 0;x--){
if(gap[x] > n){
continue;
}
for(int p = 0;p < gap[x];p++){
for(int i = p;i < n;i += gap[x]){
int t = 114514;
int px = -1;
for(int j = i;j < n;j += gap[x]){
if(t > ns[j]){
t = ns[j];
px = j;
}
}
swap(ns[px],ns[i]);
}
}
}
for(int i = 0;i < n-1;i++){
cout << ns[i] << ' ';
}
cout << ns[n-1] << endl;
return 0;
}