luogu1168 中位数

题目大意

给出一个长度为N的非负整数序列A[i],对于所有1 ≤ k ≤ (N + 1) / 2,输出A[1], A[3], …, A[2k - 1]的中位数。即前1,3,5,……个数的中位数。

题解

要找到中位数我们需要的序列是单调不减的,故可以用二叉平衡树解决。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;const int MAX_NODE = 100010;struct SplayTree
{
private:struct Node{Node *LeftSon, *RightSon, *Father;int Key, Size, Count;Node(Node *fa, int key) : Father(fa), LeftSon(NULL), RightSon(NULL), Key(key), Size(1), Count(1){}bool IsLeftSon(){return Father->LeftSon == this;}void Refresh(){Size = (LeftSon ? LeftSon->Size : 0) + (RightSon ? RightSon->Size : 0) + Count;}bool IsRoot(){return Father == NULL || (Father->LeftSon != this && Father->RightSon != this);}}*Root;void Rotate(Node *cur){Node *gfa = cur->Father->Father;Node **gfaSon = gfa ? (cur->Father->IsLeftSon() ? &gfa->LeftSon : &gfa->RightSon) : &Root;Node **faSon = cur->IsLeftSon() ? &cur->Father->LeftSon : &cur->Father->RightSon;Node **curSon = cur->IsLeftSon() ? &cur->RightSon : &cur->LeftSon;*faSon = *curSon;if (*faSon)(*faSon)->Father = cur->Father;*curSon = cur->Father;(*curSon)->Father = cur;*gfaSon = cur;(*gfaSon)->Father = gfa;(*curSon)->Refresh();cur->Refresh();}void PushDown() {}void Splay(Node *cur){PushDown();while (cur->Father){if (!cur->Father->IsRoot())Rotate(cur->Father->IsLeftSon() == cur->IsLeftSon() ? cur->Father : cur);Rotate(cur);}}int GetKeyByRank(Node *cur, int rank){int rootSize, leftSize = (cur->LeftSon ? cur->LeftSon->Size : 0);if (rank <= leftSize)return GetKeyByRank(cur->LeftSon, rank);else if (rank <= (rootSize = leftSize + cur->Count))return cur->Key;elsereturn GetKeyByRank(cur->RightSon, rank - rootSize);}public:void Insert(int key){Node **cur = &Root, *fa = NULL;while (*cur){fa = *cur;if (key == (*cur)->Key){(*cur)->Count++;Splay(*cur);return;}else if (key < (*cur)->Key)cur = &(*cur)->LeftSon;else if (key > (*cur)->Key)cur = &(*cur)->RightSon;}*cur = new Node(fa, key);Splay(*cur);}int GetKeyByRank(int rank){return GetKeyByRank(Root, rank);}
}g;int main()
{static int A[MAX_NODE];int n;scanf("%d", &n);for (int i = 1; i <= n; i++)scanf("%d", A + i);for (int i = 1; i <= n; i += 2){g.Insert(A[i]);printf("%d\n", g.GetKeyByRank(i / 2 + 1));g.Insert(A[i + 1]);}return 0;
}

转载于:https://www.cnblogs.com/headboy2002/p/9028748.html

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

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

相关文章

费曼:所有的科学知识都是不确定的

编辑 ∑Gemini来源:设计与哲学一、不存在决定什么是好概念的权威 观察是一个概念是否含有真理的判官&#xff0c;但这个概念从何而来的呢&#xff1f;科学的快速进步和发展要求人类发明出一些东西用以检验。在中世纪&#xff0c;人们认为只要多做观察&#xff0c;观察结果本身就…

一般家用路由器买多大的合适_家用路由器多少兆合适

摘 要现在无线路由器市场上&#xff0c;各种路由器太多了&#xff0c;很多人多不知道该怎么选择。 其实家用路由器的选购根据家庭户型来判定&#xff1a; 如果是普通户型300M、450M的路由器&#xff0c;就能满足日常所需了。 如果是大户型那选择就不一现在无线路由器市场上&…

龙贝格方法c语言,龙贝格算法

#include #include #include #define N 1000//最大加速次数#define MAX 10 //数组存的最大行数(宏定义)#define a 0.0000001 //积分下限#define b 1.0 //积分上限#define eps 1e-7 //精度double f(double x)//所求得的积分公式{return sin(x) / x;}double computeT(…

Java--PATH环境变量

JDK安装成功后&#xff0c;对源程序首先需要进行的就是编译。 在DOS环境下输入javac&#xff0c;会出现以下提示&#xff1a;javac 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 出现这个问题的原因是&#xff1a;Windows操作系统无法找到javac命令文件…

RISC-V会被卡吗?那么你觉得C语言会不会被卡? | 包云岗

来源&#xff1a; 风云之声本文是对于知乎问题《从技术的角度来看&#xff0c;RISC-V 能对芯片发展、科技自主起到哪些作用&#xff1f;》的回答&#xff08;https://www.zhihu.com/question/425542531/answer/1607862976&#xff09;。一、关于RISC-V的一些解读看到很多回答都…

POJ1159

这竟然是IOI虽然是2000年的&#xff0c;但其实也改变不了它水题的本质 我写了两种方法&#xff0c;这里都讲一下吧 考虑记忆化搜索&#xff0c;用f[i][j]表示当区间的左端为i&#xff0c;右端为j时最少要添加多少字符&#xff0c;所以ans就为f[1][n] 然后考虑一下&#xff0c;对…

c语言微信备份文件,文件保存后自动刷新微信小程序

微信开发者工具支持刷新和重建的快捷键&#xff0c;所以我们可以发送一段 apple script 脚本来达到刷新/重建项目的效果&#xff0c;从而免去手工切换再使用快捷键的麻烦。例如&#xff1a;tell application "wechatwebdevtools"activatedelay 0.2tell application &…

easyui 调用dialog中的方法_SolidWorks中标准件库的创建及调用方法

在使用SolidWorks进行产品设计时&#xff0c;常用的标准件&#xff08;如螺栓、螺母、垫圈等&#xff09;通常可以在安装了SolidWorksToolbox插件后调出使用&#xff0c;而许多标准件在Toolbox并不存在&#xff0c;不能从插件中直接调用。在用到这些零件时&#xff0c;设计人员…

牛客网--牛牛找工作

题目描述 为了找到自己满意的工作&#xff0c;牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下&#xff0c;牛牛选择报酬最高的工作。在牛牛选定了自己的工作后&#xff0c;牛牛的小伙伴们来找牛牛帮忙选工作&#xff0c;牛牛依然使用自己…

【测试设计】基于正交法的测试用例设计工具--PICT

前言 我们都知道成对组合覆盖是一种非常有效的测试用例设计方法&#xff0c;但是实际工作过程中当成对组合量太大&#xff0c;我们往往很难做到有效的用例覆盖。 PICT是微软公司出品的一款成对组合命令行生成工具,它很好的解决了上述的难题。使用它我们可以有效地按照两两测试的…

Alpha fold: 人工智能在蛋白质结构预测上跑赢人类的启示

来自孙卫涛科学网博客2020年12月&#xff0c;Alpha Fold2在CASP14上 获得了惊人的进步&#xff0c;其蛋白质结构预测的能力已经达到了与实验方法相媲美的程度&#xff0c;国内外该领域的专家学者都为之惊叹&#xff0c;同时也都感受到巨大的压力&#xff0c;人工智能首次把一个…

nginx解决浏览器跨域问题_前端通过Nginx反向代理解决跨域问题

在前面写的一篇文章SpringMVC解决跨域问题&#xff0c;我们探讨了什么是跨域问题以及SpringMVC怎么解决跨域问题&#xff0c;解决方式主要有如下三种方式:JSONPCORSWebSocket可是这几种方式都是基于服务器配置的&#xff0c;即对于自己的网站是可以通过这几种方式解决的&#x…

android view使用方法,android – 如何使用getView()方法,它在哪里被调用?

我是Android开发的新手&#xff0c;并且一直遵循Android网站上提供的教程。我目前在视图教程部分&#xff0c;特别是Grid Views&#xff1a;Hello, Grid View Tutorial的教程。我无法通过适配器了解视图的形式。我明白您必须覆盖适配器类中的getView()方法&#xff0c;并且在此…

牛客网--被3整除

题目描述 小Q得到一个神奇的数列: 1, 12, 123,...12345678910,1234567891011...。 并且小Q对于能否被3整除这个性质很感兴趣。 小Q现在希望你能帮他计算一下从数列的第l个到第r个(包含端点)有多少个数可以被3整除。 输入描述: 输入包括两个整数l和r(1 < l < r < …

卷积神经网络爬虫实现新闻在线分类系统

卷积神经网络&&爬虫实现网易新闻自动爬取并分类 项目地址 采用THUCnews全部数据集进行训练&#xff0c;效果如下。 详细实现见./text_classification 部署步骤如下&#xff1a; 运行环境 服务器&#xff1a;Ubuntu 16.04 数据库&#xff1a;Mysql 5.6 python&#xf…

搞基础理论研究有什么用?

来源&#xff1a;数学中国人类文明的诞生是一个奇迹&#xff0c;构筑在现代科学技术基础之上的现代人类文明的诞生更是奇迹中的奇迹。这个奇迹中的奇迹的根基是现代技术及其广泛应用&#xff0c;而现代技术的根基则是现代科学&#xff0c;科学的根基是以数学为主要工具的基础科…

android传感器博客,Android实现接近传感器

本文实例为大家分享了Android实现接近传感器的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下1.接近传感器检测物体与听筒(手机)的距离&#xff0c;单位是厘米。一些接近传感器只能返回远和近两个状态&#xff0c;如我的手机魅族E2只能识别到两个距离&#xff1a;0CM…

python 内存分析_python内存管理分析

本文较为详细的分析了python内存管理机制。分享给大家供大家参考。具体分析如下&#xff1a;内存管理&#xff0c;对于Python这样的动态语言&#xff0c;是至关重要的一部分&#xff0c;它在很大程度上甚至决定了Python的执行效率&#xff0c;因为在Python的运行中&#xff0c;…

牛客网--牛牛的闹钟

牛牛总是睡过头&#xff0c;所以他定了很多闹钟&#xff0c;只有在闹钟响的时候他才会醒过来并且决定起不起床。从他起床算起他需要X分钟到达教室&#xff0c;上课时间为当天的A时B分&#xff0c;请问他最晚可以什么时间起床 输入描述: 每个输入包含一个测试用例。 每个测试用…

由内而外:大脑是如何形成感官记忆的

大数据文摘出品来源&#xff1a;sciencedaily编译&#xff1a;张大笔茹通常&#xff0c;大脑会对我们感官收集的信息进行编码。为了感知环境并与之进行建设性的互动&#xff0c;这些感官信号需要在以往的经验和当前目标的背景下进行解释。最新一期的《科学》杂志上&#xff0c;…