华丽的队列

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. jQuery学习(七)——使用JQ完成下拉列表左右选择

    1.需求:实现以下功能 2.步骤分析: 第一步:确定事件(鼠标单击事件click) 第二步:获取左侧下拉列表被选中的option($(“#left option:selected”)) [假设左侧se ...

  2. STM8S103之独立看门狗和窗口看门狗

    独立看门狗时钟来源为LSI:窗口看门狗时钟来源为CPU: 窗口看门狗窗口的含义是:喂狗必须在一定的窗口期内完成,不能过早也不能过晚. 总结:防止程序复位,用独立看门狗. 独立看门狗使用的流程:参见库函 ...

  3. 搭建ss总结

    今天晚上做的事情: 1. https://www.vultr.com/ 购买vps 2. ssh连接到服务器 参照网上帖子安装 https://blog.csdn.net/littlepig19930 ...

  4. luoguP1555 尴尬的数字(暴力+map)

    题意 题解 枚举每一个可能的二进制数.扔到一个map里 再枚举每一个可能的三进制数看map有没有就行了 反正就是很水 #include<iostream> #include<cstr ...

  5. Maven命令下载源码和javadocs

    1:Maven命令下载源码和javadocs 当在IDE中使用Maven时如果想要看引用的jar包中类的源码和javadoc需要通过maven命令下载这些源码,然后再进行引入,通过mvn命令能够容易的 ...

  6. Pimple相关的源码

    已经有了非常好的Pimple的相关解析,建议先看下:Pimple - 一个简单的 PHP 依赖注入容器读 PHP - Pimple 源码笔记(上)读 PHP - Pimple 源码笔记(下) 这里通过 ...

  7. 【codeforces 589G】Hiring

    [题目链接]:http://codeforces.com/problemset/problem/589/G [题意] 有n个人; 每个人每天在开始工作之前,都需要di单位的准备时间,然后才能开始工作; ...

  8. OO问题

    设计一个在线的酒店预订系统,并且可以通过城市搜索出来 解决办法: Main Class: User Room Hotel Booking Adress Enums : 房间的状态和类型 public ...

  9. video : Write and Submit your first Linux kernel Patch

    http://v.youku.com/v_show/id_XNDMwNzc3MTI4.html After working with Linux (mostly as an advanced user ...

  10. 【C#】报表制作&lt;机房重构&gt;

    前言 和VB须要引用其它报表软件不同,VS自带报表设计的功能,初次尝试.就感受到了它的强大之处. 报表制作 话不多说.直接报表的制作过程. 1.首先,我们要先制作一个报表的容器.放到我们显示报表的窗口 ...