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