Code Forces-681C(模拟题,优先队列,设计STL)

题目大意

其实就是用有限队列模拟一个类似..的。。。其实就是模拟题目所述过程

insert x

将值为x的元素放在堆中;(直接插入元素)

getMin x

堆中包含的最小元素的值等于x;(这个x是不是对应的值。如果队列中首元素比其大,那就加其上一个;如果相等直接取出;如果小于就不断取队列中最小元素。)

removeMin

从堆中提取最小元素(只有一个实例,如果有多个)。(要先判队列内元素是否为空)
注意判断命令的先后顺序就是了

输入输出分析

Input

2
insert 3         //插入3
getMin 4       //4>3,就要插入4;

Output

4
insert 3
removeMin
insert 4
getMin 4

Input

4
insert 1       //插入1
insert 1       //插入1
removeMin  //此时最小为1
getMin 2   

Output

6
insert 1
insert 1
removeMin
removeMin
insert 2
getMin 2

代码分析

#include<bits/stdc++.h>     //包含C++的所有头文件 
using namespace std;

char str[10]; //存放所输入的命令
int i, j, n, t, x;
pair<int, int> p[1000010];  //对于pair类,由于它只有两个元素,分别名为first和second,可直接使用
普通的点操作符即可访问其成员
priority_queue <int, vector<int>, greater<int> > q;  
//第二个参数为容器类型。第二个参数为比较函数。

int main()
{
    scanf("%d",&n);
    for(i = 1; i <= n; i++)
    {
        scanf("%s", str); //输入
        if(str[0] != 'r') scanf("%d",&x); //判断如果不是removMin就继续输入
        if(str[0] == 'i') // insert
        {
            q.push(x); //插入数字
            p[++t] = make_pair(1,x); //make_pair对已存在的两个数据构造一个新的pair类型
        }
        else if(str[0]=='r') //removMin
        {
            if(q.empty()) //如果数组为空
            {
                p[++t] = make_pair(1,1);
                q.push(1); //压入
            }
            q.pop(); //非空,弹出顶端元素
            p[++t] = make_pair(2,0); //压入
        }
        else //getMin
        {
            while(!q.empty() && q.top()<x)
            {
                q.pop();
                p[++t] = make_pair(2,0);
            }
            if(q.empty() || q.top() != x)
            {
                q.push(x);
                p[++t] = make_pair(1, x);
            }
            p[++t] = make_pair(3, x);
        }
    }
    printf("%d\n", t);

    for(i = 1; i <= t; i++)
    {
        if(p[i].first == 1)
            printf("insert %d\n", p[i].second);
        else if(p[i].first == 2)
            printf("removeMin\n");
        else
            printf("getMin %d\n", p[i].second);
    }
    return 0;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,485评论 19 139
  • 01 我以前做事情有列计划的习惯。每次列计划,都恍惚间变身成了超人,整个世界都美好了。等到开始执行的时候,又被打回...
    安东城阅读 1,179评论 4 6
  • 出阁日期:2017年6月25日 星期日 宴请时间:10:58宴请地点:金满庄园酒店 (河东街湖泗汰桥南...
    看得见的声音阅读 860评论 0 0
  • 我总觉得你就是我所熟悉的某某,某某,或者某某 面对你被一捆柴绑在一起的童年 一眼不眨,突然有雪花自远方飘飘而下 身...
    乔桥阅读 200评论 1 3
  • 欧乐,21世纪的传奇人物,中医世家传人,人称‘邪医’最喜欢做的事是和阎王抢人。可是一觉醒来却无缘无故的灵魂穿越了?...
    尧久久阅读 377评论 2 2

友情链接更多精彩内容