POJ 3784 Running Median G++ 堆巧妙 求动态中位数 背
程序员文章站
2022-05-04 15:13:52
...
#include <iostream>
#include <queue>
#include <cstdio>
#include <vector>
#include <functional>
using namespace std;
//英语 抄博友程序 堆巧妙 求动态中位数 背
int main()
{
int T;
scanf("%d",&T);
for(int o=0;o<T;o++)
{
int tag,n;
scanf("%d%d",&tag,&n);
printf("%d %d\n",tag,(n+1)/2);
priority_queue<int> L;//大堆
priority_queue<int,vector<int>,greater<int> > R;//小堆 存大数
while(L.empty()!=1)
{
L.pop();
}
while(R.empty()!=1)
{
R.pop();
}
int t;
scanf("%d",&t);
printf("%d ",t);
R.push(t);
int js=1;
for(int i=2;i<=n;i++)
{
scanf("%d",&t);
if(t>R.top())
{
R.push(t);
}else
{
L.push(t);
}
if(i%2==1)
{
js++;
if(L.size()>R.size())
{
printf("%d",L.top());
}else
{
printf("%d",R.top());
}
if(js%10==0)
{
printf("\n");
}else
{
printf(" ");
}
}else
{
if(L.size()>R.size())
{
int t=L.top();
L.pop();
R.push(t);
}else if(L.size()<R.size())
{
int t=R.top();
R.pop();
L.push(t);
}
}
}
if(js%10!=0)
{
printf("\n");
}
}
return 0;
}