poj3784Running Median——堆维护中间值
2024-09-08 07:07:19
题目:http://poj.org/problem?id=3784
将较小的数放入大根堆,较大的数放入小根堆,控制较小数堆大小比较大数堆小1,则较大数堆堆顶即为中位数。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int p,bh,m,a[10005],hp1[10005],hp2[10005],ct1,ct2;
void pus1(int x)
{
ct1++;
hp1[ct1]=x;
int now=ct1;
while(now>1)
{
int tp=now/2;
if(hp1[now]>hp1[tp])
swap(hp1[now],hp1[tp]),now=tp;
else break;
}
}
void pus2(int x)
{
ct2++;
hp2[ct2]=x;
int now=ct2;
while(now>1)
{
int tp=now/2;
if(hp2[now]<hp2[tp])
swap(hp2[now],hp2[tp]),now=tp;
else break;
}
}
int del1()
{
int res=hp1[1];
swap(hp1[1],hp1[ct1]);
ct1--;
int now=1;
while(now*2<=ct1)
{
int tp=now*2;
if(tp<ct1&&hp1[tp]<hp1[tp+1])tp++;
if(hp1[now]<hp1[tp])
swap(hp1[now],hp1[tp]),now=tp;
else break;
}
return res;
}
int del2()
{
int res=hp2[1];
swap(hp2[1],hp2[ct2]);
ct2--;
int now=1;
while(now*2<=ct2)
{
int tp=now*2;
if(tp<ct2&&hp2[tp]>hp2[tp+1])tp++;
if(hp2[now]>hp2[tp])
swap(hp2[now],hp2[tp]),now=tp;
else break;
}
return res;
}
void mv1()
{
int k=del1();
pus2(k);
}
void mv2()
{
int k=del2();
pus1(k);
}
int main()
{
scanf("%d",&p);
while(p--)
{
scanf("%d%d",&bh,&m);
ct1=0;ct2=0;
memset(hp1,0,sizeof hp1);
memset(hp2,0,sizeof hp2);
int js=0;
for(int i=1;i<=m;i++)
scanf("%d",&a[i]);
for(int i=1;i<=m;i++)
{
if(a[i]<hp1[1])
pus1(a[i]);
else pus2(a[i]);
if(i%2)
{
while(ct1>ct2-1)mv1();
while(ct1<ct2-1)mv2();
js++;
if(js==1)printf("%d %d\n",bh,(m+1)/2);
printf("%d ",hp2[1]);
if(js%10==0)printf("\n");
}
}
if(js%10)printf("\n");
}
return 0;
}
最新文章
- 数据库中树形列表(以easyui的tree为例)
- linux常用命令(二)
- [原创]Java静态代码检查工具介绍
- 第三篇 Integration Services:增量加载-Adding Rows
- MVC 上传文件并展示
- hdu 4719 动态规划
- 【转】 树莓派学习笔记——I2C设备载入和速率设置
- VB6之WebBrowser控件
- C 语言内存区域分配(进程的各个段)详解
- Null value was assigned to a property of primitive type setter of com.oa.manager.personnel.bean.KqAttendanceHoliday.dayType
- unity开发多语言版本
- [Basics] 递归
- Django框架的使用教程--类视图-中间间-模板[六]
- hdu1828 扫描线计算周长
- 漫画描述HDFS工作原理
- webapi文件上传和下载
- 51nod 1532 带可选字符的多字符串匹配(位运算)
- storm(一) window机制
- 50个php程序性能优化的方法,赶紧收藏吧!
- MongoDB的Go语言驱动注意点