1064. Complete Binary Search Tree (30)

1064. Complete Binary Search Tree (30)

#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
class CA
{
public:
	enum{N=1100};
	void run();
	int getroot(int l,int r);
	int ar[N],n;
};

int CA::getroot(int l,int r)
{
	int c=r-l+1,c1,jc;
	if(c<=0) return -1;
	if(c==1) return l;
	c1=c+1;
	while((c1&(c1-1))!=0) c1++;
	jc=c1/4-(c1-1-c);
	if(jc>=0) return l+(c1/2-1);
	else return l+(c1/2-1)+jc;
}
void CA::run()
{
	queue<pair<int,int> > q;
	pair<int,int> pi;
	scanf("%d",&n);
	int i,r;
	for(i=0;i<n;i++) scanf("%d",ar+i);
	sort(ar,ar+n);
	r=getroot(0,n-1);
	if(r>=0)
	{
		printf("%d",ar[r]);
		q.push(pair<int,int>(0,r-1));
		q.push(pair<int,int>(r+1,n-1));
	}
	while(!q.empty())
	{
		pi=q.front();q.pop();
		r=getroot(pi.first,pi.second);
		if(r>=0)
		{
			printf(" %d",ar[r]);
			q.push(pair<int,int>(pi.first,r-1));
			q.push(pair<int,int>(r+1,pi.second));
		}
	}
}

int main()
{
//	freopen("test.in","r",stdin);
	CA *a=new CA;
	a->run();
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章