题目(复杂)

给定一个长度为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-终极数【堆】相关推荐

  1. [算法学习] 线段树,树状数组,数堆,笛卡尔树

    都是树的变种,用途不同 [线段树 Interval Tree] 区间管理,是一种平衡树 可看做是对一维数组的索引进行管理.一维数组不需要是排序好的 深度不超过logL 任一个区间(线段)都分成不超过2 ...

  2. 数据库信息 (表名 行数 堆 集群 非聚集)的查询

    /************************************************************ * Time: 2010-10-07 13:23:32 * 找出有索引的表信 ...

  3. 堆和栈的概念和区别 python_C++堆用法详解

    堆(heaps)是一种特殊的数据组织方式,STL 中的 priority_queue 容器适配器底层就是采用堆来组织数据存储的.为了弄明白堆是什么,首先要搞清楚什么是树存储结构. 树是分层排列的元素或 ...

  4. 【数据结构入门】堆(Heap)

    文章目录 一.堆的结构及实现(重要) 1.1 二叉树的顺序结构 1.2 堆的概念及结构 1.3 堆的实现 1.3.1 堆的向下调整算法 1.3.2 向下调整算法的时间复杂度 1.3.3 堆的创建(向下 ...

  5. 纪念中学15-5(=10)天感想

    来自水lao ten days の 感想 前言 时光飞逝,转眼间,纪念中学的10天生活就那么过去了.回想起刚来,仿佛就在昨天.今天我将要离开这里,总感觉有无限的遗憾,无限的失落.可是花朵总是要谢,时光 ...

  6. 2017.7.7 C组总结

    NO.1 题目描述: 给定一个长度为N的序列a,对于每一个数都可选或不选,把选出的数有序组成一个新的序列b,使b序列的"和谐数"最大. 一个序列的和谐数如下定义:对于位置i,如果第 ...

  7. c++计算eigen随笔(8)-数组、矩阵、向量(1)

    typedef Matrix<Scalar, RowsAtCompileTime, ColsAtCompileTime, Options> MyMatrixType; typedef Ar ...

  8. C# new关键字和对象类型转换(双括号、is操作符、as操作符)

    一.new关键字 CLR要求所有的对象都通过new来创建,代码如下: Object obj=new Object(); 以下是new操作符做的事情 1.计算类型及其所有基类型(一直到System.Ob ...

  9. 从0开始详解 Johnson 全源最短路(P5905 【模板】Johnson 全源最短路)

    问题引入:([模板]Johnson 全源最短路 - 洛谷) ps:(如果不想 情景带入 请直接转跳到Johnson算法详解) 目录 问题引入:([模板]Johnson 全源最短路 - 洛谷) 题目描述 ...

最新文章

  1. ubuntu配置ipv6
  2. pandas打印全部列_python——pandas练习题1-5
  3. 从开源爱好者到 Apache 董事,他花了 11 年
  4. 校门外的树和memset
  5. 服务器内存检测维修工具,使用edac工具来检测服务器内存故障.
  6. 华为网络安全工程师:HCNA-Security(H12-711)题型解析(第一部分)-马青-专题视频课程...
  7. 知乎热议:科学网发布文章称「我国数学家证明 NP=P」,会带来怎样的影响?
  8. 大型网站技术架构-核心原理与案例分(李智慧 著)第1章-大型网站架构演化
  9. 13. 查询表orders——统计销售总量大于50的各类商品的ID和销售总量
  10. 用友添加附件设置文件服务器,用友服务器怎么配置上传附件
  11. PAKDD 2019 AutoML 挑战赛圆满落幕,中国队伍包揽前三...
  12. unreal engine 4 如何创建地形、地表贴图。
  13. C语言源代码系列-管理系统之车票管理系统
  14. iOS开发------简单实现图片多选功能(Photos.framework篇)
  15. DNS 114.114.114.114与8.8.8.8
  16. 机器学习 python
  17. java是几位的unicode,下列说法错误的是()。A.Java的字符类型采用的是Unicode编码,每个Unicode码占16位比特B.Java的各种...
  18. mysql 中查看表结构的命令
  19. 【9007】最短路径
  20. 【转载】__declspec(dllimport) __declspec(dllexport)

热门文章

  1. 如何给远程计算机添加用户,如何访问远程计算机以添加/删除/管理用户帐户?...
  2. 快速修改HTML5,HTML5无刷新修改URL(示例代码)
  3. 客制化键盘编程_指尖运动会,谁是打字冠军,双十一机械键盘推荐
  4. java父类转子类_java中什么是继承,和继承的接口的关系?
  5. loadrunner录制事件为0_测试工具LoadRunner常见问题汇总,解决方案整理
  6. 机器学习之tensorflow出现的一些问题
  7. python语言中不用来定义函数的关键字_Python 语言中用来定义函数的关键字是
  8. [C++11]对模板右尖括号的优化
  9. [设计模式]策略模式
  10. [PAT乙级]1007 素数对猜想