题目详情点击这里

思路:用std::stack来表示题目中说的栈,现在关键问题就是如何找到中位数。

可以用二分答案+树状数组的方法

由于每个元素最大不超过1e5,因此开一个大小为1e5的树状数组来存储不超过x的数有多少个

每次push一个元素,都把以它为下标的树状数组位置+1,pop就相当于-1

这样的话sum(x)的含义就是栈中不超过x的数有多少个。然后就可以用二分的方法把答案确定出来了。

因为中位数x肯定要满足sum(x) >= N/2 或者sum(x) >= (N+1)/2

以前太菜了,现在看这道题目,感觉不难

代码:

#include <iostream>
#include <cstdio>
#include <stack>
using namespace std;
const int MAX = 1e5;
stack<int> stk;
int bitree[MAX + 10];
int N;
inline int lowbit(int x)
{return x&(-x);
}
void add(int pos,int x)
{while(pos <= MAX){bitree[pos] += x;pos += lowbit(pos);}
}
int sum(int pos)
{int res = 0;while(pos > 0){res += bitree[pos];pos -= lowbit(pos);}return res;
}
bool check(int x,int size)
{if(N&2 == 0)return sum(x) >= size/2; else return sum(x) >= (size+1)/2;
}
int main()
{scanf("%d",&N);char ops[20];for(int i = 0;i < N;i++){scanf("%s",ops);if(ops[1] == 'o'){if(stk.empty())puts("Invalid");else{int val = stk.top();stk.pop();add(val,-1);printf("%d\n",val);}}else if(ops[1] == 'u'){int val;scanf("%d",&val);stk.push(val);add(val,1);}else{if(stk.empty()){puts("Invalid");continue;}int l = 0,r = MAX;while(l < r){int m = (l+r)/2;if(check(m,stk.size()))r = m;elsel = m+1;}printf("%d\n",l);}}return 0;} 

L3-002 堆栈 树状数组+二分答案相关推荐

  1. 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 ...

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

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

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

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

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

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

  5. 最长上升子序列(LIS)/最长不上升子序列问题算法详解+例题(树状数组/二分优化,看不懂你来打我)

    目录 最长上升子序列 一.朴素做法O(2n)O(2^n)O(2n) 二.优化做法O(nlogn)O(nlogn)O(nlogn) 三.例题引入:P1020 导弹拦截(求最长上升子序列和最长不上升子序列 ...

  6. P6619-[省选联考2020A/B卷]冰火战士【树状数组二分】

    正题 题目链接:https://www.luogu.com.cn/problem/P6619 题目大意 有火系战士和冰系战士有一个温度和一个战斗力,每次加入或删除一个战士,要求一个最大的kkk使得温度 ...

  7. POJ2182-Lost Cows【树状数组,二分】

    正题 题目链接:http://poj.org/problem?id=2182 题目大意 给出每头牛前面有多少个比它高的,求每头牛的最大高度. 解题思路 建立一个01序列,表示每个高度是否被占用过,然后 ...

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

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

  9. 小路绫只会做料理 (ayaya)(树状数组 二分)

    题目描述 小路绫 (Komichi Aya) 想要给阳子 (Inokuma Youko) 做便当. 小路绫现在有n种食材,编号从1到n,她会按编号顺序放入这n种食材. 对于每种食材阳子有一个美味度ai ...

最新文章

  1. [置顶]       jQuery乱谈(六)
  2. Science审稿人谈中国首次实现量子优越性:「九章」到底打了谁的脸?
  3. [羊城杯 2020]GMC
  4. log函数 oracle power_Excel之数学函数SQRT/MOD/EXP/LN/RAND
  5. C#无法生成解决方案,System.InvalidOperationException: 此实现不是 Windows 平台 FIPS 验证的加密算法的一部分。
  6. python兼职程序员工资-Python 程序员的工资能有多高?
  7. 物体检测中常用的几个概念迁移学习、IOU、NMS理解
  8. sql时间函数的基本用法
  9. 安卓开发与java_安卓开发和Java开发有什么区别?
  10. LiveData的postValue与setValue多次调用问题
  11. Failed to introspect annotated methods on class 异常
  12. android wifi增强,Android增强WiFi性能
  13. flutter基础 dart语言学习笔记
  14. uc浏览器、QQ浏览器的h5页面,点击分享按钮,分享到微信、qq、微博
  15. Android安卓成品项目 购物商城系统源码apk
  16. pythondcnda算法聚类_分层聚类ahc算法
  17. 【稳定性day4】美团外卖高可用的演进之路 - 日活两千万的挑战
  18. future cancel失败一例
  19. vue - vue的配置文件vue.config.js介绍
  20. 文件的基本操作--利用爬取的王者荣耀李信台词进行练习

热门文章

  1. android平板 useragent,移动端适配 user-Agent
  2. 算法设计与分析——递归与分治策略——全排列
  3. mysql报4934_mysql-Mariadb语法错误1064(42000)
  4. php 百度云 上传,求个PHP版百度云BOS上传文件的dome
  5. [mybatis]动态sql_foreach_遍历集合批量插入
  6. [C++11]字符串原始字面量
  7. [观察,找规律]算法题目训练
  8. C++未定义行为-数组越界
  9. python 16进制补零_Python输出16进制不带0x补零,整数转16进制,字符串转16进制
  10. 天气情况图像分类练习赛 第三阶段(赛中感)