华丽的队列

Time Limit:3000MS Memory Limit:65536KB
Total Submit:531 Accepted:68

Description 

每年,都有很多新同学来到我们学校,最近,我们学校的领导为了考验新同学的能力,想出了一个方法来测试:
领导们定义了一个队列,队列中的元素是顺序存放的,领导们还定义了队列的几种操作:
a) insert x ,向队列末尾添加一个元素x
b) delete ,删除队列前的第一个元素
c) MinElement 删除队列中的最小元素
HINT: 
1.insert的元素x(0<=x<=1000000)
2.队列中的元素是唯一的,不会出现重复元素
3.对于每组测试数据,操作的数量(0<=op<=50000)

Input 

首先一个正整数N,代表操作的数量:
接下来从2到N+1行:
每行开始一个字符串s,有3种字符串: insert , delete 或者 MinElement
对于insert 接下来有个整数x,代表插入队列的元素
对于delete ,删除队首的元素
对于MinElement , 返回队列中的最小元素,并且把这个元素从队列中删除

Output 

对于每个操作,输出不同的答案:

对于insert ,输出队列中元素的总数n
对于delete ,删除队首的元素,并且输出这个队首元素x
对于MinElement , 输出队列中的最小元素x.并且把这个元素从队列中删除

Sample Input 

6
insert 1
insert 2
insert 3
insert 4
delete
MinElement

Sample Output 

1
2
3
4
1
2

Source

华丽的队列

解题:没找到别的方法,只好强行上线段树了。

 #include <bits/stdc++.h>
using namespace std;
const int maxn = ;
const int INF = 0x3f3f3f3f;
struct node {
int lt,rt,minv;
} tree[maxn<<];
int ret;
void build(int lt,int rt,int v) {
tree[v].lt = lt;
tree[v].rt = rt;
tree[v].minv = INF;
if(lt == rt) return;
int mid = (lt + rt)>>;
build(lt,mid,v<<);
build(mid+,rt,v<<|);
}
void update(int lt,int rt,int v,int val) {
if(lt <= tree[v].lt && rt >= tree[v].rt) {
ret = tree[v].minv;
tree[v].minv = val;
return ;
}
if(lt <= tree[v<<].rt) update(lt,rt,v<<,val);
if(rt >= tree[v<<|].lt) update(lt,rt,v<<|,val);
tree[v].minv = min(tree[v<<].minv,tree[v<<|].minv);
}
int head(int v) {
if(tree[v].lt == tree[v].rt) {
return tree[v].lt;
}
if(tree[v<<].minv < INF) return head(v<<);
if(tree[v<<|].minv < INF) return head(v<<|);
}
int tail(int v) {
if(tree[v].lt == tree[v].rt) return tree[v].lt;
if(tree[v<<|].minv < INF) return tail(v<<|);
if(tree[v<<].minv < INF) return tail(v<<);
}
int themin(int v) {
if(tree[v].lt == tree[v].rt) return tree[v].lt;
if(tree[v<<].minv < tree[v<<|].minv) return themin(v<<);
if(tree[v<<|].minv < tree[v<<].minv) return themin(v<<|);
}
int main() {
int m,val,siz = ,h;
char op[];
scanf("%d",&m);
build(,,);
while(m--) {
scanf("%s",op);
if(op[] == 'i') {
scanf("%d",&val);
if(siz == ) {
update(,,,val);
} else {
h = tail();
update(h+,h+,,val);
}
siz++;
printf("%d\n",siz);
} else if(op[] == 'd') {
h = head();
update(h,h,,INF);
printf("%d\n",ret);
siz--;
} else if(op[] == 'M') {
h = themin();
update(h,h,,INF);
printf("%d\n",ret);
siz--;
}
}
return ;
}

ECNUOJ 2149 华丽的队列的更多相关文章

  1. OJ题解记录计划

    容错声明: ①题目选自https://acm.ecnu.edu.cn/,不再检查题目删改情况 ②所有代码仅代表个人AC提交,不保证解法无误 E0001  A+B Problem First AC: 2 ...

  2. HDU 4557 非诚勿扰 队列、(记一次失败的SBT尝试)

    非诚勿扰 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) [Problem De ...

  3. js函数整合队列顺序执行插件

    前言 在日常开发中,也许我们会遇到这样的一个问题.我们利用[发布订阅模式](如果不了解的可以直接访问此链接www.cnblogs.com/xiaoxiaokun- )去执行[发布]事件时,遇到函数内部 ...

  4. RabbitMQ ——与Spring集成及exchange的direct、topic方式实现和简单队列实现

    程序整体结构 Maven依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http: ...

  5. APC 篇——备用 APC 队列

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...

  6. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  7. 消息队列 Kafka 的基本知识及 .NET Core 客户端

    前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是因为要配合其他 java 项目中,所以就对 Kafka 了解了一下,也算是做个笔记吧. 本篇不谈论 Kafka 和其他的一些消息 ...

  8. Beanstalkd一个高性能分布式内存队列系统

    高性能离不开异步,异步离不开队列,内部是Producer-Consumer模型的原理. 设计中的核心概念: job:一个需要异步处理的任务,是beanstalkd中得基本单元,需要放在一个tube中: ...

  9. .net 分布式架构之业务消息队列

    开源QQ群: .net 开源基础服务  238543768 开源地址: http://git.oschina.net/chejiangyi/Dyd.BusinessMQ ## 业务消息队列 ##业务消 ...

随机推荐

  1. php 添加redis扩展

    我主要是按照http://blog.163.com/fan_xy_qingyuan/blog/static/1889877482014111111283265/ 这篇博客来的,但是这篇博客里只有php ...

  2. CSS3新增的属性有哪些:

    CSS 用于控制网页的样式和布局. CSS3 是最新的 CSS 标准. CSS3新增了很多的属性,下面一起来分析一下新增的一些属性: 1.CSS3边框: border-radius:CSS3圆角边框. ...

  3. Nginx 防止SQL注入、XSS攻击的实践配置方法

    下班的时候,发现博客访问缓慢,甚至出现504错误,通过 top -i 命令查看服务器负载发现负载数值飙升到3.2之多了,并且持续时间越来越频繁直至持续升高的趋势,还以为是被攻击了,对来访IP进行了阈值 ...

  4. BZOJ 4668 冷战(按秩合并并查集+LCA)

    4668: 冷战 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 627  Solved: 303[Submit][Status][Discuss] D ...

  5. [HDU5688]2016"百度之星" - 资格赛 Problem D

    题目大意:给你n个字符串,如果一个字符串可以通过重新排列变成另一个字符串,则认为这两个字符串相等.每输入一个字符串,输出这个字符串和与它相等的之前出现了几次. 解题思路:我们可以用map保存一个字符串 ...

  6. windows下命令行复制

    在CMD命令提示符窗口中点击鼠标右键,选择“标记”选项,然后按住鼠标左键不动,拖动鼠标标记想要复制的内容.标记完成以后请按键盘上的“回车”键

  7. virt-install 创建虚拟机

    [root@kvm-server vm]# qemu-img create -f qcow2 centos69b-disk0.qcow2 10G Formatting 'centos69b-disk0 ...

  8. Hadoop的datanode超时时间设置

    datanode进程死亡或者网络故障造成datanode无法与namenode通信, namenode不会立即把该节点判定为死亡,要经过一段时间,这段时间暂称作超时时长. HDFS默认的超时时长为10 ...

  9. 【codeforces 466D】Increase Sequence

    [题目链接]:http://codeforces.com/problemset/problem/466/D [题意] 给你n个数字; 让你选择若干个区间; 且这些区间[li,ri]; 左端点不能一样; ...

  10. 洛谷——P1428 小鱼比可爱

    https://www.luogu.org/problem/show?pid=1428 题目描述 人比人,气死人:鱼比鱼,难死鱼.小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度.参赛的鱼被从 ...