华丽的队列

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. + (void)initialize vs 静态构造方法

    在继承体系中,多个子类的引用,父类缺省执行一次: 特殊情况: 1)子类没有实现.调用父类方法: 2)子类显示调用父类: 3)存在分类实现,分类实现覆盖本体. Initializes the class ...

  2. 关于深度残差网络(Deep residual network, ResNet)

    题外话: From <白话深度学习与TensorFlow> 深度残差网络: 深度残差网络的设计就是为了克服这种由于网络深度加深而产生的学习效率变低,准确率无法有效提升的问题(也称为网络退化 ...

  3. 结构化数据、半结构化数据、非结构化数据——Hadoop处理非结构化数据

    刚开始接触Hadoop ,指南中说Hadoop处理非结构化数据,学习数据库的时候,老师总提结构化数据,就是一张二维表,那非结构化数据是什么呢?难道是文本那样的文件?经过上网搜索,感觉这个帖子不错 网址 ...

  4. 路飞学城Python-Day10(practise)

    作业:现要求你写一个简单的员工信息增删该查程序,需求如下:当然此表在文件存储时可以这样表示1,Alex Li,22,13651054608,IT,2013-04-012,Jack Wang,28,13 ...

  5. [CTSC2012]熟悉的文章(广义后缀自动机+二分答案+单调队列优化DP)

    我们对作文库建出广义后缀自动机.考虑用\(SAM\)处理出来一个数组\(mx[i]\),表示从作文的第\(i\)个位置向左最远在作文库中出现的子串的长度.这个东西可以在\(SAM\)上跑\(trans ...

  6. 第五周-磁盘分区GPT、shell脚本练习、lvm详解

    1. 描述GPT是什么,应该怎么使用 Linux中磁盘分区分为MBR和GPT. MBR全称为Master Boot Record,为主引导记录,是传统的分区机制,应用于绝大多数使用的BIOS的PC设备 ...

  7. Vue异步组件Demo

    Vue异步组件Demo 在大型应用中,我们可能需要将应用拆分为多个小模块,按需从服务器下载.为了进一步简化,Vue.js 允许将组件定义为一个工厂函数,异步地解析组件的定义.Vue.js 只在组件需要 ...

  8. COGS——T 826. [Tyvj Feb11] GF打dota

    http://www.cogs.pro/cogs/problem/problem.php?pid=826 ★★☆   输入文件:dota.in   输出文件:dota.out   简单对比时间限制:1 ...

  9. POJ——T2553 The Bottom of a Graph

    http://poj.org/problem?id=2553 Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 10987   ...

  10. ESRI.ArcGIS.Controls.AxMapControl

    今天在写DLL时发现,直接引用ESRI.ArcGIS.Controls,发现AxMapControl的参数仍然不好用,后来发现,需要引用ESRI.ArcGIS.AxControls这个DLL.而且还需 ...