jzoj2152-终极数【堆】

题目(复杂)

给定一个长度为n的序列a,试求出对于序列a的每一个前缀的终极数x,使得
From jzoj
最小,试求出终极数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]);//计算终极数的终极数
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谈谈准确率(P值)、召回率(R值)及F值

转载自 谈谈准确率&#xff08;P值&#xff09;、召回率&#xff08;R值&#xff09;及F值 谈谈准确率&#xff08;P值&#xff09;、召回率&#xff08;R值&#xff09;及F值 一直总是听说过这几个词&#xff0c;但是很容易记混&#xff0c;在这里记录一下。希望对大家理解…

线程创建两种方式

方式一(继承于Thread类) 创建一个继承于Thread类的子类重写Thread类的run() --> 将此线程执行的操作声明在run()中创建Thread类的子类的对象通过此对象调用start() package com.wdl.java;//1. 创建一个继承于Thread类的子类 class MyThread extends Thread {//2. 重写Thre…

在ASP.NET CORE 2.0使用SignalR技术

一、前言 上次讲SignalR还是在《在ASP.NET Core下使用SignalR技术》文章中提到&#xff0c;ASP.NET Core 1.x.x 版本发布中并没有包含SignalR技术和开发计划中。时间过得很快&#xff0c;MS已经发布了.NET Core 2.0 Preview 2 预览版&#xff0c;距离正式版已经不远了&#xf…

【jzoj】2018/2/2 NOIP普及组——D组模拟赛

前言 今天五道题&#xff0c;难度做起来感觉很难&#xff0c;其实就是纸老虎233。 正题 题目1&#xff1a;公牛数学&#xff08;jzoj1896&#xff09; 就是高精乘 输入 第1..2行&#xff1a;每行包含一个十进制数 输出 第1行&#xff1a;输出两个数乘积 样例输入 1111…

java中常见的几种内部类,你会几个?(未完)

点击上方蓝色关注我们&#xff01;大家好&#xff0c;我是雄雄&#xff0c;今天给大家介绍的是java中的几种内部类。java中常见的几个内部类&#xff0c;你会几个&#xff1f;我会四个&#xff01;在看每个新知识点时&#xff0c;我们不禁有这样或者那样的疑问&#xff0c;比如…

通俗理解信息熵

转载自 通俗理解信息熵 通俗理解信息熵 前段时间德川和我讲解了决策树的相关知识&#xff0c;里面德川说了一下熵&#xff0c;今天整理了一下&#xff0c;记录下来希望对大家理解有帮助~ 1、信息熵的公式 先抛出信息熵公式如下&#xff1a; 其中代表随机事件X为的概率&…

程序、进程、线程

程序(program) 是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码&#xff0c;静态对象。 进程(process) 是程序的一次执行过程&#xff0c;或是正在运行的一个程序。是一个动态的过程&#xff1a;有它自身的产生、存在和消亡的过程。——生命周期 如…

.NET Core 2.0 Preview 2为开发人员带来改进

Microsoft发布了.NET Core 2第二个预览版&#xff08;Preview 2&#xff09;&#xff0c;该版本可用于Mac OS X、Linux和Windows平台。Preview 2首次给出了对所有平台上各种软件包和安装程序的统一命名模式。所有的运行时文件将以"dotnet-运行时名称”命名&#xff0c;而S…

java中,剩下的这两个内部类不太好理解!

点击上方蓝色关注我们&#xff01;大家好&#xff0c;我是雄雄&#xff0c;今天我们接着昨天的分享&#xff0c;将剩余的两个内部类&#xff08;方法内部类和匿名内部类&#xff09;结束掉&#xff0c;这两个内部类都不太好理解。昨天的推文&#xff1a;java中常见的几种内部类…

【jzoj】2018.2.3NOIP普及组——D组模拟赛

前言 万年D组系列… 正题 题目1&#xff1a;数池塘&#xff08;jzoj1898&#xff09; 有一个地方有一些积水&#xff0c;连着的积水是一个池塘&#xff0c;求池塘数。 输入 第1行&#xff1a;由空格隔开的两个整数&#xff1a;N和M 第2..N1行&#xff1a;每行M个字符代表…

并行与并发

**并行&#xff1a;**多个CPU同时执行多个任务。比如&#xff1a;多个人同时做不同的事。 **并发&#xff1a;**一个CPU(采用时间片)同时执行多个任务。比如&#xff1a;秒杀、多个人做同一件事。

通俗理解条件熵

转载自 通俗理解条件熵 通俗理解条件熵 前面我们总结了信息熵的概念通俗理解信息熵,这次我们来理解一下条件熵。 1、信息熵以及引出条件熵 我们首先知道信息熵是考虑该随机变量的所有可能取值&#xff0c;即所有可能发生事件所带来的信息量的期望。公式如下&#xff1a; 我…

WebAssembly:随风潜入夜

What&#xff1f; WebAssembly 是一种二进制格式的类汇编代码&#xff0c;可以被浏览器加载和并进一步编译成可执行的机器码&#xff0c;从而在客户端运行。它还可以作为高级语言的编译目标&#xff0c;理论上任何语言都可以编译为 WebAssembly。 我们知道汇编语言就是机器码的…

让java的多重继承成为现实!

点击上方蓝色关注我们&#xff01;大家好&#xff0c;我是雄雄&#xff0c;前两天给大家说了说java中的四种内部类&#xff0c;推文分别为&#xff1a;静态内部类和成员内部类方法内部类和匿名内部类在内部类的基础上&#xff0c;我们来看看今天的知识点儿。众所周知&#xff0…

jzoj1751-Span(每日C组)【并查集,贪心】

题目 有n个村&#xff0c;m条路&#xff0c;给n-1条路刷油漆连接n个村&#xff0c;让最长边与最短边的长度差最小。 输入输出&#xff08;建议跳过&#xff09; Input 第一行给出一个数字TOT&#xff0c;代表有多少组数据,Tot<6 对于每组数据&#xff0c;首先给出N&…

线程优先级

MAX_PRIORITY&#xff1a;10 MIN _PRIORITY&#xff1a;1 NORM_PRIORITY&#xff1a;5 -->默认优先级 2.如何获取和设置当前线程的优先级&#xff1a; getPriority():获取线程的优先级 setPriority(int p):设置线程的优先级 说明&#xff1a;高优先级的线程要抢占低优先级线…

通俗理解决策树算法中信息增益的

转载自 通俗理解决策树算法中信息增益的 通俗理解决策树算法中的信息增益 在决策树算法的学习过程中&#xff0c;信息增益是特征选择的一个重要指标&#xff0c;它定义为一个特征能够为分类系统带来多少信息&#xff0c;带来的信息越多&#xff0c;说明该特征越重要&#x…

列表

# 列表 a [20, 40] a a [50] # 将原列表的元素和新列表的元素依次复制到新的列表对象中 a.extend([10, 20]) # 将目标列表的所有元素添加到本列表的尾部&#xff0c;属于原地操作&#xff0c;不创建新的列表对象。 a.insert(2, 100) b a * 3 # 乘法扩展 生成一个新列表 …

DDD理论学习系列(6)-- 实体

1.引言 实体对应的英语单词为Entity。提到实体&#xff0c;你可能立马就想到了代码中定义的实体类。在使用一些ORM框架时&#xff0c;比如Entity Framework&#xff0c;实体作为直接反映数据库表结构的对象&#xff0c;就更尤为重要。特别是当我们使用EF Code First时&#xf…

班级日常 | 一天一瞬间!

点击上方蓝色关注我们&#xff01;欢迎来到今天的“一天一瞬间”专栏在学习word操作时&#xff0c;同学们的兴趣还是较高的&#xff0c;但是&#xff0c;比起“一天一个黑科技”来说&#xff0c;还是差了许多&#xff01;前面两天都是学的一些简单的DOS命令&#xff0c;比如进某…