- #include<iostream>//先排序把大的一部分放右子树小的放左边 因为先输出左子树
- #include<cstdlib>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- const int maxn=655351;
- int n,x,heap_size,heap[maxn],pre[maxn];
- int p[maxn];
- void dfs(int x,int l,int r)//不断分治只要l==r return; 开始定义个cmp从大到小排序然后和第一行操作一样
- { //但没调试出来 写出来的神牛M我
- p[x]=pre[l];
- if(l==r)return ;
- int mid=(l+r)>>1;
- dfs(x*2,mid+1,r);
- dfs(x*2+1,l+1,mid);
- }
- void read()
- {
- scanf("%d",&n);
- for(int i=1;i<=n;i++)
- {
- scanf("%d",&pre[i]);
- }
- sort(pre+1,pre+1+n);
- dfs(1,1,n);
- for(int i=1;i<=n;i++)cout<<p[i]<<" ";
- }
- int main()
- {
- freopen("lazy.in","r",stdin);
- freopen("lazy.out","w",stdout);
- read();
- return 0;
- }