题意

给我们一个n表示操作数量 然后三种操作
push和pop 还有求中位数的操作
让我们根据操作输出正确的解

分析

用sort排序做 或者 map标记法都会超时
考虑更快的方法
如何快速找到给定一串数的中位数
可以去索引 但是需要排序
题目中告诉我们每个元素都小于1e5
那么也就是说 上下界已知
那么求中位数 也就是求小于等于某个数的个数正好为所有数的一半
那么求小于等于某个数的个数 可以用树状数组去记录
然后查中位数时 在树状数组中二分小于等于的个数mid的元素的下界
树状数组可以用来统计小于等于某元素的数量

code

#include<bits/stdc++.h>
using namespace std;
/*树状数组中记录的是小于当前元素的数量 由于树状数组符合单调性 所以可以二分这个容量的中间值
*/
char a[20];
int c[100003];
vector<int>s;
void add(int x,int i){while(x<=100000){c[x]+=i;x+=x&(-x);}
}
int sum(int x){    //统计小于x的数量 int ans = 0;while(x){ans+=c[x];x-=x&(-x);}return ans;
}
int find(int md){int l = 0,r = 100000,mid,ans;while(l<=r){//二分查找小于等于mid元素的数量  mid = l+r>>1;int ss = sum(mid);if(ss>=md)r = mid-1;else l = mid+1;} return l;
}
int main()
{int n;scanf("%d",&n);while(n--){scanf("%s",a);if(a[1]=='o'){if(s.size()==0){puts("Invalid");continue;}printf("%d\n",s[s.size()-1]);add(s[s.size()-1],-1);s.pop_back();}else if(a[1]=='u'){int val;scanf("%d",&val);add(val,1);s.push_back(val); } else{if(s.size()==0){puts("Invalid");continue;}int f = s.size()+1>>1;printf("%d\n",find(f));}}return 0;
}

pat-1057 Stack 树状数组+二分查找相关推荐

  1. hdu(4339)树状数组+二分查找

    /* s1[i]与s2[i]匹配,树状数组i位置更新1,否则更新0.*/#include<stdio.h> #include<string.h> #include<alg ...

  2. VK Cup 2012 Qualification Round 2 C. String Manipulation 1.0 线段树 or 树状数组+二分

    http://codeforces.com/problemset/problem/159/C 题意: 给你一个字符串s,给出一个数k,k倍的s串组成新串str.然后给出n个操作,每个操作对应着pi,c ...

  3. P2161 [SHOI2009]会场预约[线段树/树状数组+二分/STL]

    题目描述 PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也就是说,前一个 ...

  4. POJ2828 Buy Tickeys 树状数组+二分 线段树留坑。。。

    题意:一堆人排队买票,告诉你一堆人的序号(序号的意思是插在"当前"第几个人的后面)和姓名(姓名用编号代替). 思路:线段树 或 树状数组+二分(自己还不会线段树,所以这里继续留坑) ...

  5. 树状数组 + 二分 - Query HDU - 4339

    树状数组 + 二分 - Query HDU - 4339 题意: T组测试用例,每组给定两个长度分别为l1和l2的字符串s1,s2.有两种询问:①.1idic:将第id个字符串的第i个字符变成字符c. ...

  6. [HDU - 2852] KiKi's K-Number (树状数组+二分)

    链接 http://acm.hdu.edu.cn/showproblem.php?pid=2852 题意 现在需要你对一个空序列做nnn次操作,操作分三种 0x0\ \ x0  x :向序列中加入一个 ...

  7. D. Multiset(树状数组 + 二分)

    Multiset 可能更好的阅读体验 思路 二分 + 树状数组做法 我们发现每个数的范围是$ <= 1e6$的,所以可以直接在线操作,不用离散化离线操作. 这个时候我们的treetreetree ...

  8. L3-002 堆栈 树状数组+二分答案

    题目详情点击这里 思路:用std::stack来表示题目中说的栈,现在关键问题就是如何找到中位数. 可以用二分答案+树状数组的方法 由于每个元素最大不超过1e5,因此开一个大小为1e5的树状数组来存储 ...

  9. HDU 2852 KiKi's K-Number (树状数组+二分)

    题意: 给出一些操作: 0 x 在数组中加入一个数x 1 x 在数组中去掉一个数x 2 a k 在数组中查询比a大的第k小数 分析: 首先看到题目的数据范围 e<100000 ,发现数组完全可以 ...

最新文章

  1. 德国最有影响力的数学家(上)
  2. python编程课程上课有用吗-Python培训网络课堂|Python编程软件有哪些功能?
  3. 我是如何拿到蚂蚁金服 offer ?
  4. linux ie8找不到,ie浏览器不见了怎么办 三种方法搞定【图文教程】
  5. 我的性格是外向型,解决问题导向的
  6. RequireJS 主要函数
  7. ObjecT4:On-line multiple instance learning (MIL)学习
  8. 10进制转换16进制补足0_信息技术教师资格必考内容——进制换算(一)
  9. 一般是一个较为复杂的 飞鸽传书 对象
  10. 搜狗2011笔试题+答案解析
  11. 面试题 03.02. 栈的最小值
  12. servlet 同版本对应的Tomcat版本 ,不同版本的web.xml写法
  13. HttpURLConnection的使用步骤
  14. PowerEdge r730xd 安装centos 6.7
  15. win7多国语言包下载与安装
  16. 2021研究生数学建模B题,空气质量检测
  17. Python——百度识图-相似图片爬虫下载解决方案
  18. 如何在WordPress中使用SEO写作助手来改善SEO
  19. 技能梳理25@stm32+adxl345+电机震动+串口输出
  20. 设计,构建线框图和对Android应用进行原型制作:第1部分

热门文章

  1. EF6 如何判断DataContext有修改,以及如何放弃修改
  2. hasLayout和filter滤镜的细节
  3. mysql事务模式怎么查_Mysql InnoDB中的查询事务模式与锁定select ..for update
  4. Android 微信登录
  5. C# 系统环境变量读取
  6. csv mysql_将csv的数据导入mysql
  7. dos安装深度linux,U盘用grub4dos引导Deepin v20 Beta iso安装的方法
  8. hadoop join
  9. 《java程序员修炼之道》pdf书籍
  10. [SimplePlayer] 2. 在屏幕上显示视频图像