求助P1168
  • 板块学术版
  • 楼主liaoyichen
  • 当前回复4
  • 已保存回复4
  • 发布时间2021/7/27 13:32
  • 上次更新2023/11/4 13:09:49
查看原帖
求助P1168
486675
liaoyichen楼主2021/7/27 13:32

原题

#include<bits/stdc++.h>
#include<queue>
#define N 100005
using namespace std;
priority_queue<int,vector<int>,less<int> > x;
priority_queue<int,vector<int>,less<int> > y;
int n,a[N],m;
int main()
{   cin>>n;
    cin>>a[1];
    cout<<a[1]<<endl;
    m=a[1];
    for(int i=2;i<=n;i++)
    {   cin>>a[i];
        if(a[i]>m)//大于中位数,加入右边 
        {   y.push(a[i]);
        }
        else
        {   x.push(a[i]);//大小于中位数同理 
        }
        if(i%2==1)
        {   while(x.size()!=y.size())//只要两边数量不平衡就一直操作 
            {   if(x.size()>y.size())//其中一边多,则另一边加入mid,赋值mid为一边的堆顶 
                {   y.push(m);
                    m=x.top();
                    x.pop();
                }
                else
                {   x.push(m);
                    m=y.top();
                    y.pop();
                }
            }
            //cout<<i<<endl; 
            cout<<m<<endl;//输出 
        }
    }
    return 0;
} 
2021/7/27 13:32
加载中...