A direct applicatin of the heap data structure. Specifically, a max heap is used. The required functions include insertion of a node to the heap and extraction of the maximum element of the heap. Each time you insert or remove an element to or from the heap, you need to maintain the max heap property.

The code is as follows.

If you want to learn more about heap, you may refer to this passage.

 #include <iostream>
#include <vector> using namespace std; class Heap {
public:
Heap() {
data.clear();
} inline int parent(int idx) {
return (idx - ) >> ;
} inline int left(int idx) {
return (idx << ) + ;
} inline int right(int idx) {
return (idx << ) + ;
} void max_heapify(int idx) {
int largest = idx;
int l = left(idx), r = right(idx);
if (l < (int)data.size() && data[l] > data[largest]) largest = l;
if (r < (int)data.size() && data[r] > data[largest]) largest = r;
if (largest != idx) {
swap(data[idx], data[largest]);
max_heapify(largest);
}
} void insert(int elem) {
data.push_back(elem);
int idx = data.size() - ;
while (idx >= && parent(idx) >= && data[parent(idx)] < data[idx]) {
swap(data[parent(idx)], data[idx]);
idx = parent(idx);
}
} int extract_max(void) {
int maximum = data[];
swap(data[], data[data.size() - ]);
data.erase(data.end() - , data.end());
max_heapify();
return maximum;
} private:
vector<int> data;
}; int main(void) {
int events;
while (scanf("%d", &events) != EOF) {
Heap sugars;
for (int i = ; i < events; i++) {
char order[];
scanf("%s", order);
if (order[] == 'A') {
int sugar;
scanf("%d", &sugar);
sugars.insert(sugar);
}
else printf("%d\n", sugars.extract_max());
}
}
return ;
}

[hihoCoder] 题外话·堆的更多相关文章

  1. hihoCoder#1105 题外话·堆

    原题地址 有没有更优雅地堆模板啊,总感觉我写的有些啰嗦 代码: #include <iostream> using namespace std; #define MAX_NODE 1000 ...

  2. 【HIHOCODER 1105】题外话·堆

    描述 小Ho有一个糖果盒子,每过一段时间小Ho都会将新买来的糖果放进去,同时他也会不断的从其中挑选出最大的糖果出来吃掉,但是寻找最大的糖果不是一件非常简单的事情,所以小Ho希望能够用计算机来他帮忙计算 ...

  3. HihoCoder1105 题外话·堆(基础二叉搜索树)

    第1行为1个整数N,表示需要处理的事件数目. 接下来的M行,每行描述一个事件,且事件类型由该行的第一个字符表示,如果为'A',表示小Ho将一粒糖果放进了盒子,且接下来为一个整数W,表示这颗糖果的重量: ...

  4. 题外话(简识UML语言)

    PS:“不积小流无以成为江河,不积跬步无以至千里”,学习也好,吃饭也罢,做任何事情都需要一步一个脚印,逐步积累过程,最后才会知识越来越丰富,吃的越饱… 在学习过程中用到了一些框图,用于绘画框图的语言数 ...

  5. 题外话:Lua脚本语言存在的意义

    纯属个人见解. 大致来说:c/c++执行效率高,游戏中一些性能敏感的复杂计算需要用c/c++来实现,防止游戏卡顿和低帧率.这些复杂计算包括战斗逻辑,复杂AI,骨骼动画蒙皮骨骼点的坐标计算等等.但c++ ...

  6. 题外话 -- windows10系统C盘空间变大 CPU莫名跑满

    场景描述: 安装windows10一段时间了,发现C盘空间越来越小 CPU有时候,莫名其妙的跑满,造成操作卡顿. 如何处理参考: windows10 C盘空间清理:https://jingyan.ba ...

  7. 题外话:我想立刻辞职,然后闭关学习编程语言,我给自己3个月时间学习C语言!这样行的通吗

    以下文章虽然是编程,但是对于IT行业都通用 文章背景,回答提问:我想立刻辞职,然后闭关学习编程语言,我给自己3个月时间学习C语言!这样行的通吗? 我的建议是这样:1. 不要辞职.首先说,你对整个开发没 ...

  8. 一个.net Cookie组件的bug引发的题外话

    在.net里,做过Http模拟发送请求的朋友们应该遇到过,有个时候无论怎么努力,都没办法让Cookie跟网页用浏览器所收集的一样,其中原因除了有些Cookie大概是ReadOnly之外,似乎另有隐情: ...

  9. 题外话:计算密集型 vs IO密集型

    我们把任务分为计算密集型和IO密集型,erlang作为IO密集型的语言,适合网关等相关的场景,而对计算达到某一量级后,可能处理效率下降的很明显. erlang不适合数值计算.erlang是解释型的,虽 ...

随机推荐

  1. crc32 根据字符串获取校验值

    using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text; n ...

  2. python--文件处理范例

    import os,os.path,string dir="D:\\curl\\data" if (os.path.exists(dir)==False): print " ...

  3. android Volley 上传文件上传图片

    Volley不解释了吧, android 官方的一个网络请求库. 源码的地址在: git@github.com:com314159/VolleyMultiPartRequest.git 上面的是ssh ...

  4. 王兴内部讲话:为什么中国To B企业都活得这么惨

    本文节选自美团创始人王兴内部讲话.在讲话中,王兴罕见地分享了他对全球和中国宏观经济的理解,谈了他对 TO B 业务的深度思考.全文近 15000 字,干货非常多,值得你花时间阅读. 我们今天讲一下餐饮 ...

  5. C++刷题——2830: 递归求1*1+2*2+3*3+……+n*n

    Description 定义一个递归函数sum int sum(int n); //函数声明,返回12+22+32+--+n2的和 注意:sum为递归函数 Input 正整数n的值 Output 12 ...

  6. Linux学习一

    1.Linux的优缺点: 长处: 稳定的系统 免费或少许费用 安全性,漏洞的高速修补 多任务,多用户 用户与用户的规划 相对不耗资源的系统 适合须要小内核的嵌入式系统 整合度佳且多样的图形用户界面 缺 ...

  7. atitit.jQuery Validate验证框架详解与ati Validate 设计新特性

    atitit.jQuery Validate验证框架详解与ati Validate 设计新特性 1. AtiValidate的目标1 2. 默的认校验规则1 2.1. 使用方式 1.metadata用 ...

  8. [elk]kibana搜索绘图

    kibana绘图 好些日志入库了需要分析. 1,首先分析top10 url的table和柱状分布 2,其次想着分析下404所占比例,以及404所对应的url table. 3,最后分析一下请求总数. ...

  9. 创建一个很大的EMP表 EMP_LARGE

    --CREATE TABLE EMP_LARGE AS SELECT * FROM EMP ; ---先复制一张EMP表 DECLARE --声明变量 v_loop NUMBER; v_num NUM ...

  10. SPI—读写串行 FLASH

    SPI协议简介SPI 协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线.它被广泛地使用在 ADC. LCD ...