记录编号 335806 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 中位数 最终得分 100
用户昵称 GravatarNewBee 是否通过 通过
代码语言 C++ 运行时间 3.310 s
提交时间 2016-11-02 18:47:23 内存使用 1.25 MiB
显示代码纯文本
#include<cstdio>
#define Cu fclose(stdin);fclose(stdout);return 0;
#define Begin freopen("median.in","r",stdin);freopen("median.out","w",stdout);chul();Cu;
using namespace std;
//且换得人生里美玉无瑕。 
const int maxn=250010;
int heap[maxn],size=0;
void swap(int& x,int& y){
	x=x^y;
	y=x^y;
	x=x^y;
}
void chul(){
	int n;
	bool k;
	scanf("%d",&n);
	if(n%2)k=1;
	else k=0;
	int t=(n>>1)+1;
	int x,pa,son;
	for(int i=1;i<=t;i++){
		scanf("%d",&x);
		heap[++size]=x;
		pa=size;
		while(pa!=1){
			if(heap[pa>>1]<heap[pa]){
				swap(heap[pa>>1],heap[pa]);
				pa=pa>>1;
			}
			else break;
		}
	}
	for(int i=t+1;i<=n;i++){
		scanf("%d",&x);
		if(x>=heap[1])continue;
		heap[1]=heap[size];
		size--;
		pa=1;
		while((pa<<1)<=size){
			son=pa<<1;
			if((pa<<1)<size){
				if(heap[son]<heap[pa<<1|1]){
					son=pa<<1|1;
				}
			}
			if(heap[son]>heap[pa]){
				swap(heap[son],heap[pa]);
				pa=son;
			}
			else break;
		}
		heap[++size]=x;
		pa=size;
		while(pa!=1){
			if(heap[pa>>1]<heap[pa]){
				swap(heap[pa>>1],heap[pa]);
				pa=pa>>1;
			}
			else break;
		}
	}
	double ans;
	if(k){
		ans=heap[1];
		printf("%.1f",ans);
	}
	else{
		ans=heap[1];
		heap[1]=heap[size];
		size--;
		pa=1;
		while((pa<<1)<=size){
			son=pa<<1;
			if((pa<<1)<size){
				if(heap[son]<heap[pa<<1|1]){
					son=pa<<1|1;
				}
			}
			if(heap[son]>heap[pa]){
				swap(heap[son],heap[pa]);
				pa=son;
			}
			else break;
		}
		ans+=heap[1];
		printf("%.1f",ans/2);
	}
}
int main(){
	Begin;
}