THU数据结构编程作业一:隧道(Tunel)

本题主要解决的问题:
常数时间复杂度范围内获得栈的最大值;
用两个栈模拟一个队列。
细节问题:scanf 和 getchar 获取输入的问题。
问题描述
现有一条单向单车道隧道,每一辆车从隧道的一端驶入,另一端驶出,不允许超车。该隧道对车辆的高度有一定限制,在任意时刻,管理员希望知道此时隧道中最高车辆的高度是多少。
现在请你维护这条隧道的车辆进出记录,并支持查询最高车辆的功能

输入
第一行仅含一个整数,即高度查询和车辆出入操作的总次数n

以下n行,依次这n次操作。各行的格式为以下几种之一:

1. E x      //有一辆高度为x的车进入隧道(x为整数)
2. D        //有一辆车离开隧道
3. M        //查询此时隧道中车辆的最大高度

输出
若D和M操作共计m次,则输出m行
对于每次D操作,输出离开隧道车辆的高度
对于每次M操作,输出所查询到的最大高度

样例
Input

9
E 5
E 6
M
E 2
M
D
M
D
M

Output

6
6
5
6
6
2

限制
0 ≤ n ≤ 2,000,000
0 ≤ x ≤ 2^31 - 1
保证车辆的进出序列是合法的
时间:2 sec
空间:256 MB

提示
如何由多个栈来模拟一个队列?可参考第四章末尾的某习题。
如何实现一个能够高效获取最大值的栈?
如何实现一个可以高效获取最大值的队列?
可参考第04章XA节的讲义以及《习题解析》的[10-19]题、[10-20]题.


先上上源代码:

#include<cstdio>
#include<cstdlib>

using namespace std;
//fast io
const size_t sz = 1 << 20;
struct fastio{
    char inbuf[sz];
    char outbuf[sz];
    fastio(){
        setvbuf(stdin, inbuf, _IOFBF, sz);
        setvbuf(stdout, outbuf, _IOFBF, sz);
    }
}io;

//maximum tunel length
const size_t max_sz = 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值