jzoj2152-终极数【堆】
题目(复杂)
给定一个长度为n的序列a,试求出对于序列a的每一个前缀的终极数x,使得
最小,试求出终极数t(如若有多个终极数t,只需输出最小的那个)
正解
其实就是求中位数…
输入
第一行一个整数n,第二行n个整数,中间用空格隔开
输出
输出一行一个整数,即表示终极数t
样例输入
5
1 2 3 4 5
Sample Input2
10
1 2 3 4 5 6 7 8 9 10
样例输出
2
Sample Output2
3
解题思路
主要是求中位数的时间问题,这里开两个堆,一个小根堆,一个大根堆。只要保证小根堆里的数都大于大根堆里的数,然后小根堆的堆顶就是中位数。
代码(仅供参考,切勿抄袭)
#include<cstdio>
#include<algorithm>
using namespace std;
int a1[500002],a2[500002],t[1000001],n,x,num1,num2;
void upA(int x)
{int t;while (x>1 && a1[x]<a1[x/2]){swap(a1[x],a1[x/2]);x/=2;}
}//小根堆调整
void upB(int x)
{int t;while (x>1 && a2[x]>a2[x/2]){swap(a2[x],a2[x/2]);x/=2;}
}//大根堆调整
void downA(int x)
{int t,y;while (x*2<=num1 && a1[x]>a1[x*2] || x*2+1<=num1 && a1[x]>a1[x*2+1]){y=x*2;if (y+1<=num1 && a1[y+1]<a1[y]) y++;swap(a1[x],a1[y]);x=y;}
}//小根堆调整
void downB(int x)
{int t,y;while (x*2<=num2 && a2[x]<a2[x*2] || x*2+1<=num2 && a2[x]<a2[x*2+1]){y=x*2;if (y+1<=num2 && a2[y+1]>a2[y]) y++;swap(a2[x],a2[y]);x=y;}
}//大根堆调整
int main()
{//freopen("c.in","r",stdin);//freopen("c.out","w",stdout);scanf("%d",&n);for (int i=1;i<=n;i++){scanf("%d",&x);if (num1<=num2){if (x<a2[1]){a1[++num1]=a2[1];upA(num1);downA(1);a2[1]=x;downB(1);//保证小根堆里的数比大根堆大}else{a1[++num1]=x;upA(num1);downA(1);//放入小根堆}}else{if (x>a1[1]){a2[++num2]=a1[1];upB(num2);downB(1);a1[1]=x;downA(1);//保证大根堆里的数比小根堆里的数小}else{a2[++num2]=x;upB(num2);downB(1);//放入大根堆}}t[i]=a1[1];//记录终极数}sort(t+1,t+1+n);printf("%d",t[n/2]);//计算终极数的终极数
}
jzoj2152-终极数【堆】相关推荐
- [算法学习] 线段树,树状数组,数堆,笛卡尔树
都是树的变种,用途不同 [线段树 Interval Tree] 区间管理,是一种平衡树 可看做是对一维数组的索引进行管理.一维数组不需要是排序好的 深度不超过logL 任一个区间(线段)都分成不超过2 ...
- 数据库信息 (表名 行数 堆 集群 非聚集)的查询
/************************************************************ * Time: 2010-10-07 13:23:32 * 找出有索引的表信 ...
- 堆和栈的概念和区别 python_C++堆用法详解
堆(heaps)是一种特殊的数据组织方式,STL 中的 priority_queue 容器适配器底层就是采用堆来组织数据存储的.为了弄明白堆是什么,首先要搞清楚什么是树存储结构. 树是分层排列的元素或 ...
- 【数据结构入门】堆(Heap)
文章目录 一.堆的结构及实现(重要) 1.1 二叉树的顺序结构 1.2 堆的概念及结构 1.3 堆的实现 1.3.1 堆的向下调整算法 1.3.2 向下调整算法的时间复杂度 1.3.3 堆的创建(向下 ...
- 纪念中学15-5(=10)天感想
来自水lao ten days の 感想 前言 时光飞逝,转眼间,纪念中学的10天生活就那么过去了.回想起刚来,仿佛就在昨天.今天我将要离开这里,总感觉有无限的遗憾,无限的失落.可是花朵总是要谢,时光 ...
- 2017.7.7 C组总结
NO.1 题目描述: 给定一个长度为N的序列a,对于每一个数都可选或不选,把选出的数有序组成一个新的序列b,使b序列的"和谐数"最大. 一个序列的和谐数如下定义:对于位置i,如果第 ...
- c++计算eigen随笔(8)-数组、矩阵、向量(1)
typedef Matrix<Scalar, RowsAtCompileTime, ColsAtCompileTime, Options> MyMatrixType; typedef Ar ...
- C# new关键字和对象类型转换(双括号、is操作符、as操作符)
一.new关键字 CLR要求所有的对象都通过new来创建,代码如下: Object obj=new Object(); 以下是new操作符做的事情 1.计算类型及其所有基类型(一直到System.Ob ...
- 从0开始详解 Johnson 全源最短路(P5905 【模板】Johnson 全源最短路)
问题引入:([模板]Johnson 全源最短路 - 洛谷) ps:(如果不想 情景带入 请直接转跳到Johnson算法详解) 目录 问题引入:([模板]Johnson 全源最短路 - 洛谷) 题目描述 ...
最新文章
- ubuntu配置ipv6
- pandas打印全部列_python——pandas练习题1-5
- 从开源爱好者到 Apache 董事,他花了 11 年
- 校门外的树和memset
- 服务器内存检测维修工具,使用edac工具来检测服务器内存故障.
- 华为网络安全工程师:HCNA-Security(H12-711)题型解析(第一部分)-马青-专题视频课程...
- 知乎热议:科学网发布文章称「我国数学家证明 NP=P」,会带来怎样的影响?
- 大型网站技术架构-核心原理与案例分(李智慧 著)第1章-大型网站架构演化
- 13. 查询表orders——统计销售总量大于50的各类商品的ID和销售总量
- 用友添加附件设置文件服务器,用友服务器怎么配置上传附件
- PAKDD 2019 AutoML 挑战赛圆满落幕,中国队伍包揽前三...
- unreal engine 4 如何创建地形、地表贴图。
- C语言源代码系列-管理系统之车票管理系统
- iOS开发------简单实现图片多选功能(Photos.framework篇)
- DNS 114.114.114.114与8.8.8.8
- 机器学习 python
- java是几位的unicode,下列说法错误的是()。A.Java的字符类型采用的是Unicode编码,每个Unicode码占16位比特B.Java的各种...
- mysql 中查看表结构的命令
- 【9007】最短路径
- 【转载】__declspec(dllimport) __declspec(dllexport)
热门文章
- 如何给远程计算机添加用户,如何访问远程计算机以添加/删除/管理用户帐户?...
- 快速修改HTML5,HTML5无刷新修改URL(示例代码)
- 客制化键盘编程_指尖运动会,谁是打字冠军,双十一机械键盘推荐
- java父类转子类_java中什么是继承,和继承的接口的关系?
- loadrunner录制事件为0_测试工具LoadRunner常见问题汇总,解决方案整理
- 机器学习之tensorflow出现的一些问题
- python语言中不用来定义函数的关键字_Python 语言中用来定义函数的关键字是
- [C++11]对模板右尖括号的优化
- [设计模式]策略模式
- [PAT乙级]1007 素数对猜想