L3-002. 堆栈
L3-002. 堆栈
题目链接:https://www.patest.cn/contests/gplt/L3-002
线段树
可以用一个数组a[i]维护栈内数字为i的个数,若[0,K]中有n/2个数,即有n/2个比K小的数,则K为中位数。
线段树的数据修改和查询都是O(lgn)的,此题只需维护各个区间内的数的个数即可。
代码如下:
#include<cstdio>
#include<algorithm>
#include<stack>
#define N 100001
#define lson l,m,n<<1
#define rson m+1,r,n<<1|1
using namespace std;
stack<int>pq;
int st[N<<];
void build(int l,int r,int n,int key);
void change(int l,int r,int n,int key);
void updata(int n);
int query(int l,int r,int n,int key);
int main(void){
freopen("in.txt","r",stdin);
int n,key;
char s[];
scanf("%d",&n);
while(n--){
scanf("%s",s);
switch(s[]){
case 'o':
if(pq.empty())printf("Invalid\n");
else{
key=pq.top();
printf("%d\n",key);
pq.pop();
change(,,,key);
}
break;
case 'u':
scanf("%d",&key);
pq.push(key);
build(,,,key);
break;
case 'e':
if(pq.empty())printf("Invalid\n");
else{
key=pq.size()+;
key>>=;
printf("%d\n",query(,,,key));
}
break;
}
}
return ;
}
void build(int l,int r,int n,int key){
if(l>=r){
st[n]++;
return;
}
int m=(l+r)/;
if(key<=m)build(lson,key);
else build(rson,key);
updata(n);
}
void change(int l,int r,int n,int key){
if(l==r){
st[n]--;
return;
}
int m=(l+r)/;
if(key<=m)change(lson,key);
else change(rson,key);
updata(n);
}
void updata(int n){
st[n]=st[n<<]+st[n<<|];
}
int query(int l,int r,int n,int key){
if(l==r)return l;
int m=(l+r)/;
if(key<=st[n<<])return query(lson,key);
else return query(rson,key-st[n<<]);
}
L3-002. 堆栈的更多相关文章
- GDB调试汇编堆栈
GDB调试汇编堆栈 分析过程 C语言源代码 int g(int x) { return x+6; } int f(int x) { return g(x+1); } int main(void) { ...
- [反汇编练习] 160个CrackMe之002
[反汇编练习] 160个CrackMe之002. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
- 谈谈一些有趣的CSS题目(三)-- 层叠顺序与堆栈上下文知多少
开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...
- History API与浏览器历史堆栈管理
移动端开发在某些场景中有着特殊需求,如为了提高用户体验和加快响应速度,常常在部分工程采用SPA架构.传统的单页应用基于url的hash值进行路由,这种实现不存在兼容性问题,但是缺点也有--针对不支持o ...
- JVM学习(2)——技术文章里常说的堆,栈,堆栈到底是什么,从os的角度总结
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: 堆栈是栈 JVM栈和本地方法栈划分 Java中的堆,栈和c/c++中的堆,栈 数据结构层面的堆,栈 os层面 ...
- arcgis engine 中出现的内存堆栈溢出问题。
两种解决方案: 1.循环加载mxd文档的时候出现的堆栈溢出,解决办法是每次循环结束时清空FeatureLayer,感觉并不好,但是确实可以实现功能. 2.循环调取featureclass的search ...
- java 堆栈 理解
Java 中的堆和栈 堆和栈:分为数据结构的堆和栈以及内存中的堆和栈,两种理解应区分开. 数据结构中的堆: 堆实际上指的就是(满足堆性质的)优先队列的一种数据结构,第1个元素有最高的优先权. 堆性质: ...
- python列表模拟堆栈和队列
对列特点:先进先出.后进后出 用列表insert.pop模拟进队出队: >>> l = [] >>> l.insert(0,'p1') >>> l ...
- GDB调试汇编堆栈过程分析
GDB调试汇编堆栈过程分析 分析过程 这是我的C源文件:click here 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb ...
- 20145212——GDB调试汇编堆栈过程分析
GDB调试汇编堆栈过程分析 测试代码 #include <stdio.h> short val = 1; int vv = 2; int g(int xxx) { return xxx + ...
随机推荐
- [翻译]Eureka一窥
什么是Eureka? Eureka是一个基于REST的服务,主要用在AWS云环境作为服务发现,负载均衡和失败转移.我们叫这个服务,Eureka服务. Eureka也有一个JAVA客户端组件, Eure ...
- CSS控制文本在一行内显示,若有多余字符则使用省略号表示
强制文本在一行内显示,多余字符使用省略号 text-overflow: ellipsis; overflow: hidden; white-space: nowrap;
- (三)Harbor使用OpenLDAP认证登陆
接上一篇<安装Harbor>,安装好之后,接下来我们使用OpenLDAP来进行Harbor web界面的登陆验证及权限分配! OpenLDAP: 使用OpenLDAP的都知道,这是一个集 ...
- AutoLayout 之NSLayoutConstraint
这次主要讲的用代码来设置AutoLayout,为实现添加autoLayout视图主要介绍使用如下该方法,调用方法:- (void)awakeFromNib {} +(instancetype)cons ...
- C语言:json库使用学习
Json基础 一.Json的概念 Json(Javascript Object Notation)全称为JavaScript对象表示法,是一种轻量级的数据交换格式,采用完全独立于语言的文本格式.JSO ...
- Colorful Image Colorization 的环境配置
原文链接:https://github.com/richzhang/colorization 步骤基本是按照Installation里的说明 1.安装依赖库 1.1Python相关库 Python l ...
- U3D音频系统
一.基本信息 1.支持的声音格式 WAV OGG MP3 AIFF MOD S3M xm IT 导入以后,unity会选择的压缩方式: WAV:无损,音质好,文件大,适用于较短文件 OGG.MP ...
- 2.MyBatis有代理增删改
2.1 创建一个javaweb项目MyBatis_Part1,并创建如下sql脚本 create user holly identified by sys; grant dba to holly; c ...
- Java处理JPEG图片时,需要导入com.sun.image.codec.jpeg.JPEGImageEn,报错处理
Java处理JPEG图片时,需要导入com.sun.image.codec.jpeg.JPEGImageEn,会报错,不能使用相应的方法. 原因:java访问限制级api的时候,默认的eclipse设 ...
- kali rolling 安装typecho
#1 apt-get install nginx php7.0 php7.0-mysql php7.0-gd php7.0-cgi php7.0-cli php7.0-curl php7.0-fpm ...