| 记录编号 | 588048 | 评测结果 | AAAAAAAAAAAAAAAAAAAA | ||
|---|---|---|---|---|---|
| 题目名称 | 1699.中位数 | 最终得分 | 100 | ||
| 用户昵称 | 是否通过 | 通过 | |||
| 代码语言 | 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;
}