Bailian4078 实现堆结构模拟+优先队列

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bailian4078 实现堆结构模拟+优先队列相关的知识,希望对你有一定的参考价值。

4078:实现堆结构

总时间限制: 3000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB
描述
定义一个数组,初始化为空。在数组上执行两种操作:

1、增添1个元素,把1个新的元素放入数组。

2、输出并删除数组中最小的数。

使用堆结构实现上述功能的高效算法。

输入
第一行输入一个整数n,代表操作的次数。
每次操作首先输入一个整数type。
当type=1,增添操作,接着输入一个整数u,代表要插入的元素。
当type=2,输出删除操作,输出并删除数组中最小的元素。
1<=n<=100000。
输出
每次删除操作输出被删除的数字。
样例输入
4
1 5
1 1
1 7
2
样例输出
1
提示
每组测试数据的复杂度为O(nlogn)的算法才能通过本次,否则会返回TLE(超时)
需要使用最小堆结构来实现本题的算法

问题链接Bailian4078 实现堆结构
问题简述:(略)
问题分析:模拟题,不解释。
程序说明:(略)
参考链接:(略)
题记:(略)

AC的C++语言程序如下:

/* Bailian4078 实现堆结构 */

#include <bits/stdc++.h>

using namespace std;

struct Node 
    int w;
    Node(int a) w = a;
    bool operator < (const Node &a) const return w > a.w;
;

int main()

    int n, type, a;
    priority_queue<Node> q;

    scanf("%d", &n);
    while (n--) 
        scanf("%d", &type);
        if (type == 1) 
            scanf("%d", &a);
            q.push(Node(a));
         else /* type = 2 */ 
            a = q.top().w;
            q.pop();
            printf("%d\\n", a);
        
    

    return 0;

以上是关于Bailian4078 实现堆结构模拟+优先队列的主要内容,如果未能解决你的问题,请参考以下文章

《Java数据结构》——优先级队列(小根堆的模拟实现)

数据结构 Java数据结构 ---- 堆(优先级队列)

STL之堆和优先队列

什么是堆排序和优先队列? [关闭]

【数据结构】堆(优先队列):二叉堆、d堆、左式堆、斜堆与二项队列

JAVA数据结构--优先队列(堆实现)