用哈希,把push的数x作为下标给hashTable(实则不存在,直接用tree树状数组记录数据)+1,pop则是以最后一个数x作为下标-1 。

树状数组和其原理不再赘述,需要注意的是最后的二分搜索(实则是lower_bound)中位数。

#include <stdio.h>
#include <memory.h>
#include <math.h>
#include <string>
#include <cstring>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#include <algorithm>
#include <map>#define I scanf
#define OL puts
#define O printf
#define F(a,b,c) for(a=b;a<c;a++)
#define FF(a,b) for(a=0;a<b;a++)
#define FG(a,b) for(a=b-1;a>=0;a--)
#define LEN 100010
#define MAX (1<<30)+1
#define V vector<int>using namespace std;int tree[LEN];int lowbit(int x){return x&-x;
}int getSum(int p){int sum=0;while(p>0){sum+=tree[p];p-=lowbit(p);}return sum;
}void update(int p,int x){while(p<LEN){    //对于有确定边界的树状数组,应该是 p<=N ,但是这题不用考虑这些 tree[p] +=x;p+=lowbit(p);}
}char buf[100];
stack<int> s;void PeekMedian(){int l=1,r=LEN,mid,k=(s.size()+1)/2;while(l<r){mid=(l+r)/2;if(getSum(mid)<k){l=mid+1;}else{r=mid;}}O("%d\n",l);
}int main(){
//    freopen("1057.txt","r",stdin);int N,t;I("%d",&N);while(N--){I("%s",buf);if(strcmp(buf,"Pop")==0){if(s.empty()) puts("Invalid");else{t=s.top();O("%d\n",t);s.pop();update(t,-1);}}else if(strcmp(buf,"Push")==0){I("%d",&t);update(t,1);s.push(t);}else{if(s.empty()) puts("Invalid");else PeekMedian();}}return 0;
}

转载于:https://www.cnblogs.com/TQCAI/p/8573673.html

树状数组 | 1057相关推荐

  1. 1057 Stack (30 分)【难度: 中 / 知识点: 树状数组 STL】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805417945710592 本题的一个最大的难点,就是如何给一个动态的区 ...

  2. 【数据结构】树状数组笔记

    树状数组(Binary Indexed Tree, BIT) 本质上是按照二分对数组进行分组,维护和查询都是O(lgn)的复杂度 树状数组与线段树:树状数组和线段树很像,但能用树状数组解决的问题,基本 ...

  3. **PAT_甲级_1057 Stack (30分) (C++)【字符串处理/栈的模拟/树状数组】

    目录 1,题目描述 题目大意 2,思路 数据结构 函数讲解 1,void update(int x, int v): 2,int getsum(int x): 3,void PeekMedian(): ...

  4. 洛谷 P5057 [CQOI2006]简单题(树状数组)

    嗯... 题目链接:https://www.luogu.org/problem/P5057 首先发现这道题中只有0和1,所以肯定与二进制有关.然后发现这道题需要支持区间更改和单点查询操作,所以首先想到 ...

  5. Color the ball(HDU1556)树状数组

    每次对区间内气球进行一次染色,求n次操作后后所有气球染色次数. 树状数组,上下区间更新都可以,差别不大. 1.对于[x,y]区间,对第x-1位减1,第y位加1,之后向上统计 #include<b ...

  6. 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组

    [BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...

  7. Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)

    题意: 线段树做法 分析: 因为每次都是在当前位置的前缀区间查询最大值,所以可以直接用树状数组优化.比线段树快了12ms~ 代码: #include<cstdio> #include< ...

  8. poj_3067 树状数组

    题目大意 左右两个竖排,左边竖排有N个点,从上到下依次标记为1,2,...N; 右边竖排有M个点,从上到下依次标记为1,2....M.现在从K条直线分别连接左边一个点和右边一个点,求这K条直线的交点个 ...

  9. hdu 1166 敌兵布阵(树状数组)

    题意:区间和 思路:树状数组 #include<iostream> #include<stdio.h> #include<string.h> using names ...

最新文章

  1. express中放置静态文件
  2. 1079 Total Sales of Supply Chain
  3. 阿里云安全肖力:安全基础建设是企业数字化转型的基石
  4. CIC滤波器溢出处理
  5. STM32 电机教程 22 - 基于ST MCLIB无感FOC算法变有感(HALL)FOC算法
  6. Java ArrayList的实现原理详解
  7. Spring基于 XML 的声明式事务控制(配置方式)
  8. 关于近期对自己的总结
  9. 我是如何寻找数据集的,一些个人私藏
  10. 3D几何图形PS笔刷下载安装
  11. Python学习手册之类和继承
  12. python组态软件开源_freescada开源wpf组态软件
  13. 【RDMA】MPI over InfiniBand, Omni-Path, Ethernet/iWARP, and RoCE 测试结果
  14. 货币金融学(米什金)笔记:金融体系、货币相关
  15. 一个技术总监的个人综合评估,希望对大家能有所帮助(转)
  16. 词法分析扫描器的设计实现
  17. 在EXCEL中VBA编程检验身份证号码有效性
  18. 「数据集」自动驾驶都有什么测试基准?
  19. 四格漫画《MUXing》——他们在干什么
  20. matlab中imagesc函数基本学习

热门文章

  1. 程序员面试题精选100题(61)-数对之差的最大值
  2. 改善C#程序的建议6:在线程同步中使用信号量
  3. [零基础学JAVA]Java SE实战开发-37.MIS信息管理系统实战开发[JDBC](1)
  4. 2021年中国工业互联网安全大赛核能行业赛道writeup之入门的黑客
  5. 大一c语言大作业课题大全,昆明理工大学大一C语言大作业题目.doc
  6. linux blfs安装桌面,【Linux】Ubuntu14.04安装bridge-utils安装brctl
  7. 【廖雪峰Python学习笔记】面向对象编程OOP
  8. qlabel可以选中吗_Qt QLabel详解
  9. bootstrap-less源码分析:容器
  10. 训练不出结果_智能训练仪:专业化智能防控近视训练设备