记录编号 |
588048 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
中位数 |
最终得分 |
100 |
用户昵称 |
snow |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
2.750 s |
提交时间 |
2024-05-14 19:19:27 |
内存使用 |
6.73 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
int a[260000];
int n,s,b,t;
void swim(int k)
{
while(k>1&&a[k]<a[k/2])
{
swap(a[k],a[k/2]);
k=k/2;
}
}
void push(int x)
{
a[++s]=x;
swim(s);
}
void jd()
{
for(int i=1;i<=n/2+1;++i)
{
cin>>b;
push(b);
}
}
void sink(int k)
{
while(2*k<=n/2+1)
{
int j=2*k;
if(j+1<=n/2+1&&a[j]>a[j+1])
{
j=j+1;
}
if(a[k]<=a[j])
{
break;
}
swap(a[k],a[j]);
k=j;
}
}
void pop()
{
a[1]=a[s--];
sink(1);
}
int main()
{
freopen("median.in","r",stdin);
freopen("median.out","w",stdout);
s=0;
cin>>n;
jd();
t=n-(n/2+1);
while(t)
{
t--;
cin>>b;
push(b);
pop();
}
if(n%2)
{
printf("%0.1f\n",1.0*a[1]);
}
else
{
printf("%0.1f\n",1.0*(a[1]+min(a[2],a[3]))/2.0);
}
return 0;
}