【对顶堆】 POJ3784 Running Median

从服装打版到激光切割:二维异形件排版算法在实际生产中的避坑指南 本文深入探讨二维异形件排版算法在服装、家具等行业的实际应用,对比NFP和重叠移除两种核心策略的优缺点,并提供算法落地的五大实战陷阱与解决方案。通过案例分析和技术要点解析,帮助生产管理者提升材料利用率5%-15%,优化生产效率。 阅读详情

Description

For this problem, you will write a program that reads in a sequence of 32-bit signed integers. After each odd-indexed value is read, output the median (middle value) of the elements received so far.

Input

The first line of input contains a single integer P, (1 ≤ P ≤ 1000), which is the number of data sets that follow. The first line of each data set contains the data set number, followed by a space, followed by an odd decimal integer M, (1 ≤ M ≤ 9999), giving the total number of signed integers to be processed. The remaining line(s) in the dataset consists of the values, 10 per line, separated by a single space. The last line in the dataset may contain less than 10 values.

Output

For each data set the first line of output contains the data set number, a single space and the number of medians output (which should be one-half the number of input values plus one). The output medians will be on the following lines, 10 per line separated by a single space. The last line may have less than 10 elements, but at least 1 element. There should be no blank lines in the output.

Sample Input

3 
1 9 
1 2 3 4 5 6 7 8 9 
2 9 
9 8 7 6 5 4 3 2 1 
3 23 
23 41 13 22 -3 24 -31 -11 -8 -7 
3 5 103 211 -311 -45 -67 -73 -81 -99 
-33 24 56

Sample Output

1 5
1 2 3 4 5
2 5
9 8 7 6 5
3 12
23 23 22 22 13 3 5 5 3 -3 
-7 -3

Source

Greater New York Regional 2009 


 将两个堆想象成两个胖子来动态维护中位数,显然,两个堆的个数不能相差出1。

保证大顶堆的个数永远比小顶堆多一个,多出来的那一个是中位数


#include <iostream>
#include <cstring>
#include <iomanip>
#include <algorithm>
#include <queue>
#include <stack>
#include <vector>
#include <set>
#include <map>
#include <cmath>
#include <cstdio>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
const ll maxn = 1e5+100;
const ll mod = 1e9+7;
const ld pi = acos(-1.0);
const ll inf = 1e18;
const ld eps = 1e-5;

ll T,len,ans[maxn];
priority_queue<ll>ma;  //大鼎堆 
priority_queue<ll,vector<ll>,greater<ll> >mi; //小顶堆 

void add(ll x)
{
	if(x >= ma.top())
	{
		mi.push(x);
	}
	else
	{
		ma.push(x);
	}
	
	while(ma.size() < mi.size()  )
	{
		ll tmp = mi.top();
		mi.pop();
		ma.push(tmp);
	}
	
	while(ma.size() - mi.size() > 1)
	{
		ll tmp = ma.top();
		ma.pop();
		mi.push(tmp);
	}
		
	return ;
}

int main()
{	
    ios::sync_with_stdio(false);
    //cin.tie(0),cout.tie(0);
		
	cin >> T;
	
	while(T--)
	{
		len = 0;
		while(ma.size() != 0)
			ma.pop();
		while(mi.size() != 0)
			mi.pop();
		
		ll a,b;
		cin >> a >> b;
		cout << a << " " << (b+1)/2 << endl;
		
		for(ll i = 1; i <= b; i++)
		{
			ll x;
			cin >> x;
			if(i == 1)
			{
				ma.push(x);
			}
			else
			{
				add(x);
			}
			
			if(i%2 != 0)
			{
				ans[++len] = ma.top();
			}	
		}
		
		for(ll i = 1; i <= len; i++)
		{
			if(i != len)
			{
				if(i%10 == 0)
					cout << ans[i] << endl;
				else
					cout << ans[i] << " ";
			}
			else
			{
				cout << ans[i] << endl;
			}
		}
		
			
	} 
	
	return 0;
}

 

深入解析mSATA与mini-PCIE接口的硬件设计要点 本文深入解析mSATA与mini-PCIE接口的硬件设计要点,涵盖信号定义、电源设计、高速信号处理及PCB布局布线等关键内容。通过实战案例和调试技巧,帮助工程师规避常见设计陷阱,提升电路设计效率,特别适合工业控制和嵌入式系统开发场景。 阅读详情

相关推荐

【学习记录】IIC驱动ICM42670+卡尔曼滤波+四元数姿态角解算

ICM42670陀螺仪可以使用iic驱动,单片机平台使用GD32f305VE。

liarsup的博客 8270

poj 3784 Running Median

Running Median Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 742 Accepted: 354 Description For this problem, you will write a program that reads in a seque...

weixin_30652271的博客 300

Xilinx HydraMini试玩教程

HydraMini是Xilinx推出的基于Pynq-Z2开发板的自动驾驶开发小车,其有着简单易学、高灵活性、高扩展性、高性能等优良特性,是研究人员和学生进入自动驾驶领域的一个平台。本教程会通过最基础的讲解和步骤带领读者熟悉这个平台的基本开发流程。

qq_25762163的博客 1773

POJ3784:Running Median

浅谈堆:https://www.cnblogs.com/AKMer/p/10284629.html 题目传送门:http://poj.org/problem?id=3784 用一个“对顶堆”动态维护中位数。 一个大根堆维护前半部分的权值,一个小根堆维护后半部分的权值。 新进来一个数如果小于大根对的权值就加进大根对,否则就加进小根堆。 每次动态维护大小,使得大根堆的大小为数字的一半。 大根...

aga28832的博客 189

Win10更新后黑屏只剩鼠标?火绒误杀explorer.exe的5种自救方案(附详细步骤)

本文详细介绍了Win10更新后出现黑屏只剩鼠标的5种专业修复方案,重点解决火绒误杀explorer.exe的问题。从基础的任务管理器操作到安全模式下的系统修复,再到注册表编辑和系统还原,提供了全面的解决方案,帮助用户快速恢复系统正常运行。

weixin_29306571的博客 638

【YOLOv11多模态涨点改进】独家创新首发| TGRS 2026 |引入 CIFusion 通道交互融合模块,通过跨特征交互机制强化目标区域响应,适合多模态融合目标检测,小目标检测高效涨点

🔥本文提出了一种改进YOLOv11多模态目标检测模型的方法,通过引入CIFusion通道交互融合模块来提升RGB与红外特征融合效果。CIF模块采用通道级自适应交互机制,根据全局上下文动态分配不同模态通道的重要性,实现跨模态特征交互与互补信息融合。相比传统拼接或加权融合方式,CIF能够增强目标区域响应,抑制背景噪声,提高小目标和低对比度目标的检测性能。实验表明,该方法在DroneVehicle等数据集上显著提升了检测精度。论文还详细介绍了CIF模块的结构原理、实现代码及模型配置方法。

Ai缝合怪、助力小伙伴高效发论文 187

poj3784 Running Median

堆

YHaX的博客 666

Ubuntu零基础教学-史上最详Ubuntu20.04安装教程,超级详细,强烈建议收藏!

官网地址:https://www.vmware.com/ 1、VMware Workstation Pro 15.5.1在Windows 10的安装不再介绍了,一路下一步即可。 2、下面详细介绍在VMware 虚拟机里安装Ubuntu 20.04 LTS的步骤

**My Coding Family** 2万+

POJ3784 Running Median 对顶堆维护动态中位数(思维)

1.题目描述: Running Median Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1818   Accepted: 885 Description For this problem, you will write a progr

终有绿洲摇曳在沙漠 580

基于 Simulink 的 PV 光伏阵列功率发电系统仿真 Matlab

其中直流侧电压需要与光伏电池组件匹配,交流侧电压则需要与配电系统匹配,开关频率一般在几千赫兹左右,需要保证在一定范围内。根据实际需求,我们还可以通过增加负载,以及调节光照强度等方式,模拟不同的情况下系统的响应和性能表现。经过设置参数和各部分之间的传递和控制后,我们可以开始进行模型仿真。在仿真前,我们需要确定仿真时间和步长,并对整体模型进行编译。在建立完毕整体模型框架后,我们需要为每个组件设置参数,并进行传递和控制。首先,我们需要建立一个整体的模型框架,包括各个组件之间的关系和控制器的作用。

学习使你进步。 1129

【C2000系列DSP的Bootloader详解】如何利用脚本自动合并Bin文件

本文通过OutconvertBin.py实现了 C2000 Bootloader+UserApp 的「ELF 转 BIN+BIN 合并」全流程自动化,核心优势如下: 架构适配:严格遵循 C28x 16 位大端格式,生成的 BIN 文件可直接烧录; 自动化程度高:一键完成清理、转换、合并,无需手动执行多个命令; 可追溯性:生成 CRC32 校验值,便于验证文件完整性; 量产友好:合并后的merged.bin支持一次性烧录,提升量产效率。

昔时扬尘处 184

POJ-3784题解

POJ-3784 题目描述For this problem, you will write a program that reads in a sequence of 32-bit signed integers. After each odd-indexed value is read, output the median ...

cpongo11的博客 603

使用 MATLAB/Simulink + Deep Learning Toolbox,构建一个基于LSTM的电网负荷预测模

本文介绍了一个基于Simulink和深度学习的智能电网负荷预测与调度建模方法。通过LSTM神经网络构建负荷预测模型,将历史负荷、天气、日期等特征作为输入,预测未来24小时负荷。然后将训练好的模型集成到Simulink仿真系统中,结合发电单元模型和经济调度逻辑,实现预测驱动的电力调度优化。实验结果表明,该方法预测误差在2.5%-4.0%之间,相比传统调度方式可降低15%-25%的运行成本。文章详细展示了从数据准备、特征工程、模型训练到系统集成的完整流程,为智能电网中AI技术的应用提供了实用参考。

amy_mhd的博客 172

POJ - 3784 Running Median(对顶堆)

DescriptionFor this problem, you will write a program that reads in a sequence of 32-bit signed integers. After each odd-indexed value is read, output the median (middle value) of the elements received so far. InputThe first line of input contains a single

00后的博客 266

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

POJ3784 Running Median 对顶堆

题目链接 http://poj.org/problem?id=3784 分析 动态维护序列中位数可用对顶堆实现,即用大根堆维护序列前一段,用小根堆维护序列后一段。 保证大根堆内元素均比小根堆内元素小,且两堆元素个数差不超过 111。 每次输出时,元素个数较多的堆的堆顶元素即为当前序列中位数。 AC代码 #include <cstdio> #include <vector> ...

Kevin的博客 303

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

poj3784 Running Median[对顶堆]

由于我不会讲对顶堆,所以这里直接传上一个巨佬的学习笔记。 对顶堆其实还是很容易理解的,想这题的时候自己猜做法也能把没学过的对顶堆给想出来。后来了解,对顶堆主要还是动态的在线维护集合$K$大值。当然也可以带删除。但是可能退化,具体见另外一个题的说明。 像这题维护中位数就是要求第$N/2+1$大的数,所以可以让大根堆维护前$n/2$项,小根堆维护后$n/2+1$项(这里指排好序的)。然后...

dianer2977的博客 155

POJ 3784 Running Median 对顶堆算法

题意:一组数按顺序加入数组,每奇数次加入的时候就输出中位数(看成中出し的果断自粽)哼哼,如果是求最大最小值,那么我们很容易就会想到利用堆那么这道题很明显也可以用堆的办法解决——锵锵锵锵!

世界 3170

POJ3784-Running Median 【对顶堆】

For this problem, you will write a program that reads in a sequence of 32-bit signed integers. After each odd-indexed value is read, output the median (middle value) of the elements received so far. ...

独钓门前月 356

Running Median( POJ - 3784,对顶堆动态维护中位数)

一.题目链接: POJ-3784 二.题目大意: 给你 n 个数,当 i 为奇数时,输出中位数. 三.分析: 对顶堆维护即可. 另外不要 PE. 对顶堆学习 四.代码实现: #include <set> #include <map> #include <ctime> #include <queue> #include <cm...

The___Flash的博客 251

poj3784 Running Median 题解报告(对顶堆)

题目传送门 【题目大意】 读入一个整数序列,每当已经读入的整数个数为奇数时,输出已经读入的整数构成的序列的中位数。 【思路分析】 这题可以使用“对顶堆”的在线做法。为了动态维护中位数,我们可以建立两个二叉堆,一个小根堆、一个大根堆。在以此读入序列的过程中,设当前读入的序列长度为$L$,我们始终保持: 1.序列中从小到大排名为$1~\frac{M}{2}$的整数储存在大根堆中 ...

weixin_30662849的博客 206

【对顶堆】POJ 3784 Running Median

链接 http://poj.org/problem?id=3784 大意 输入nnn个数,要求第奇数次输入时,输出该序列的中位数 思路 对顶堆在线维护中位数 建立两个堆,大根堆和小根堆,令小根堆中元素的个数大于等于大根堆中元素的个数,其次,我们还需保证小根堆里的每个值必须大于等于大根堆的堆顶 代码 #include&lt;algorithm&gt; #include...

Ajwallet 430

POJ-3784 Running Median(对顶堆动态维护中位数)

POJ-3784 Running Median(对顶堆动态维护中位数) For this problem, you will write a program that reads in a sequence of 32-bit signed integers. After each odd-indexed value is read, output the median (middle value) of the elements received so far. Input The first line

hebtu_Kangweiqi的博客 281

【对顶堆】POJ_3784 Running Median

题意 有多组数据,每次给出一个序列,读入时,如果当前位置是偶数,那我们就输出此前的中位数。 思路 我们可以用到对顶堆来维护中位数。建立大小根堆,每读入一个数时,如果这个数小于等于之前的中位数,那我们就把这个数放到大根堆,否则放到小根堆。小根堆的堆顶即为中位数。任何时候,如果某一个堆中的元素过多,我们就把这个堆的堆顶放到另一个堆来维护。 代码 #include&amp;amp;lt;cstdio&amp;amp;gt...

GOODPLACE 270

poj3784 Running Median(对顶堆)

题意动态维护中位数问题:依次读入一个整数序列,每当已经读入的整数个数为奇数时,输出已读入的整数构成的序列的中位数。我的想法中位数是第(n+1)/2大的数,也可以看成是排完序后中间位置的数。再确定了一个中位数后,每加入一个新数,就用一个二分插入排序将其放入中位数左或右,这样会涉及到链表上的二分查找,我不会。其实可以用vector容器代替链表的,可以一试。题解对顶堆聪明的解题人,在中位数这里把序列折成...

A_Bright_CH的博客 423

POJ - 3784 Running Median 对顶堆 双优先级队列

For this problem, you will write a program that reads in a sequence of 32-bit signed integers. After each odd-indexed value is read, output the median (middle value) of the elements received so far.In...

hutwuguangrong的博客 225

【POJ 3784】 Running Median (对顶堆)

Running Median Description For this problem, you will write a program that reads in a sequence of 32-bit signed integers. After each odd-indexed value is read, output the median (middle value...

weixin_30709635的博客 71

poj3784 Running Median(对顶堆动态维护中位数)

Total Submissions: 4464 Accepted: 1992 Description For this problem, you will write a program that reads in a sequence of 32-bit signed integers. After each odd-indexed value is read, outpu...

一身清贫怎敢入繁华 486
上一篇: 【欧拉降幂】 super A^B%C 问题
下一篇: 【模板】快读、快写
Whyckck
博客等级 码龄9年 6粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值