题目描述

给定一个由N个元素组成的整数序列,现在有两种操作:

1 add a

在该序列的最后添加一个整数a,组成长度为N + 1的整数序列

2 mid 输出当前序列的中位数

中位数是指将一个序列按照从小到大排序后处在中间位置的数。(若序列长度为偶数,则指处在中间位置的两个数中较小的那个)

例1:1 2 13 14 15 16 中位数为13

例2:1 3 5 7 10 11 17 中位数为7

例3:1 1 1 2 3 中位数为1

输入输出格式

输入格式:

第一行为初始序列长度N。第二行为N个整数,表示整数序列,数字之间用空格分隔。第三行为操作数M,即要进行M次操作。下面为M行,每行输入格式如题意所述。

输出格式:

对于每个mid操作输出中位数的值

输入输出样例

输入样例#1:

6
1 2 13 14 15 16
5
add 5
add 3
mid
add 20
mid

输出样例#1:

5
13

说明

对于30%的数据,1 ≤ N ≤ 10,000,0 ≤ M ≤ 1,000

对于100%的数据,1 ≤ N ≤ 100,000,0 ≤ M ≤ 10,000

序列中整数的绝对值不超过1,000,000,000,序列中的数可能有重复

每个测试点时限1秒

解法

维护中位数,两个堆

发现题解大神有拿 sort+二分查找 暴力出奇迹A题的 , 还有主席树的。

操作就是

你需要一个大根堆和一个小根堆,小根堆里面放前 N/2 个大的数,大根堆里面放后 N-N/2 大的数

这样就能保证堆顶就是 中位数

在插入的时候,把 大于 堆顶的扔到小根堆  否则扔到大根堆

当然 我们还要维护 使得两个堆大小最多差1

废话

懒得写堆当然要用priority了

小根堆写法priority_queue<int,vector<int>,greater<int> >  或者你也可以机智的把数先变成负的直接扔进priority_queue里当小根堆用

#include<bits/stdc++.h>
using namespace std;
int N,Q,cnt;
char s[10];
priority_queue <int> q1,q2;
int add()
{cnt++;int x;scanf("%d",&x);if(q2.empty())q2.push(x);else if(x<q2.top())q2.push(x);else q1.push(-x);while(q2.size()>cnt-cnt/2){int tmp=-q2.top();q2.pop();q1.push(tmp); }while(q1.size()>cnt/2){int tmp=-q1.top();q1.pop();q2.push(tmp);}
}
int main()
{scanf("%d",&N);for(int i=1;i<=N;i++)add();scanf("%d",&Q);while(Q--){scanf("%s",s);if(s[0]=='a')add();else printf("%d\n",q2.top()); }     return 0;
} 

吐槽

我永远也不想回到教室学习电磁感应和基因突变

转载于:https://www.cnblogs.com/Elfish/p/7905853.html

洛谷3871 [TJOI2010]中位数 维护队列的中位数相关推荐

  1. 洛谷P3879 [TJOI2010] 阅读理解 题解

    洛谷P3879 [TJOI2010] 阅读理解 题解 题目链接:P3879 [TJOI2010] 阅读理解 题意: 英语老师留了 NNN 篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节 ...

  2. 【洛谷 P1638】 【单调队列】 逛画展

    [洛谷 P1638] [单调队列] 逛画展 题目 解题思路 先求出最前面囊括所有画的位置 然后如果左边界的画不止存在一次,左边界右移 不断扩展右边界,求取答案 代码 #include<iostr ...

  3. 洛谷 - P1886 滑动窗口(单调队列/线段树)

    题目链接:点击查看 题目大意:给出一个由n个数构成的序列,再给出一个长度为k的窗口,这个窗口从第一个下标开始一直向后移动,每次移动一个单位,每次移动询问一次该窗口中的最大值和最小值,最后输出答案 题目 ...

  4. [USACO18JAN]Lifeguards P 洛谷黑题,单调队列优化DP

    传送门:戳我 这道题有两个版本,S和P,S是K等于1的情况,显然可以用线段树水过. P版本就难了很多,洛谷黑题(NOI/NOI+/CTSC),嘿嘿. 我自己也不是很理解,照着题解写了一遍,然后悟到了一 ...

  5. 【洛谷】【动态规划+单调队列】P1725 琪露诺

    [题目描述:] 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精. 某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪露诺决定到河 ...

  6. 洛谷 - P1714 切蛋糕(单调队列+前缀和+思维)

    题目链接:点击查看 题目大意:给出一个由n个数组成的序列,求长度不超过m的连续子段和中的最大值 题目分析:因为给出了一个限制条件,所以这就不能当普通的动态规划来做了,我们可以跑一遍前缀和,然后枚举每一 ...

  7. [ZJOI2018]历史,洛谷P4338,类LCT维护

    正题 题目大意,大致就是给出一棵有根数,给出每个点access的次数,要你安排顺序,求轻重边切换最多多少次,动态加次数. 第一步其实还挺好想的,思考一下如何静态做,发现相当于对于每一个节点,就是让各个 ...

  8. 洛谷P3879 [TJOI2010] 阅读理解 哈希Hash解法

    题目描述: 英语老师留了 N 篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节约时间,现在要做个统计,算一算某些生词都在哪几篇短文中出现过. 输入格式 第一行为整数 N ,表示短文篇数, ...

  9. BZOJ1112: [POI2008]砖块Klo(洛谷P3466)

    平衡树 BZOJ题目传送门 洛谷题目传送门 动态维护中位数,平衡树上一发就好了. 代码: #include<cctype> #include<cstdio> #include& ...

最新文章

  1. 超越ImageNet?李飞飞力赞高徒的视频描述研究入选计算机视觉最前沿的十大论文
  2. CS本科毕业生能拿到45万年薪?
  3. 2016江苏计算机二级考试时间,2016年江苏计算机二级考试报名时间_无忧考网.pdf...
  4. IOS开发笔记3-C语言基础复习
  5. datalistcp.class.php,Web_PHP_DedeCMS_datalistcp.class.php 动态分页类使用案例;
  6. 【Quartz.net】- Cron表达式
  7. #pragma mark 基本使用
  8. testmeshpro合批_TextMesh Pro新手使用手册
  9. Matlab实现Faster-RCNN目标检测
  10. Log4j2 高危漏洞分析
  11. java导出word特殊符号,Word2019中输入特殊符号的方法
  12. JavaSE的思维导图
  13. 气味识别以及气味数字化存储技术
  14. ads1115与树莓派
  15. Apache NIFI
  16. ratel平头哥电脑感染app
  17. 各大网站的主题色RGB值,做icon专用
  18. 卖旧手机时恢复出厂设置就能不泄露数据?微信官方辟谣了!
  19. 网易云音乐打卡2.0(一天300首)10级指日可待
  20. STM32CubeIDE HAL库DMA方式驱动MPU925X(1)

热门文章

  1. 车险赔偿需要被保险人签字吗?
  2. erp系统是什么版本
  3. 三年级小孩近视150度需要戴近视眼镜么?
  4. 电商培训有用是有前置条件的
  5. 什么样的生意一本万利?
  6. Error: failed to unmarshal json. invalid character '\'' looking for beginning of value解决方案
  7. sql replace函数_SQL REPLACE函数概述
  8. azure 入门_Azure Cosmos DB中的子文档入门
  9. Windows Server 2016上具有Docker容器SQL Server
  10. sql server只读_如何在SQL Server 2016中为可用性组配置只读路由