如果不是可并堆/带修堆/卡常题,一般都用优先队列实现。

很多O(nlogn)过不了的题都可以用蚯蚓的套路来实现!!!

优先队列带修用延迟删除法。

堆,可以简单的用优先队列来实现,也可以自己手打。

 #include <cstdio>
#include <algorithm>
using namespace std; const int N = ;
long long int heap[*N+],top;
void down(int);
void up(int a)
{
while(heap[a]<heap[a>>] && a!=) swap(heap[a],heap[a>>]),a=a>>;
down(a);
return;
}
void down(int a)
{
if((a<<)>top) return;///这里的括号不能省;这里的等号不能加。调了一个中午的教训啊
if((a<<)==top)
{
if(heap[a]>heap[top]) swap(heap[a],heap[top]);
return;
}
if(heap[a]<=heap[a<<] && heap[a]<=heap[a<<|]) return;
if(heap[a]<heap[a<<])
{
swap(heap[a],heap[a<<|]);
down(a<<|);
return;
}
if(heap[a]<heap[a<<|])
{
swap(heap[a],heap[a<<]);
down(a<<);
return;
}
if(heap[a<<]<heap[a<<|])
{
swap(heap[a],heap[a<<]);
down(a<<);
return;
}
else
{
swap(heap[a],heap[a<<|]);
down(a<<|);
return;
}
}
void add(int a)
{
heap[++top]=a;
up(top);
return;
}
void del()
{
swap(heap[],heap[top]);
top--;
if(top<=) return;
down();
return;
}
int main()
{
int n;
scanf ("%d",&n);
int flag,x;
for(int i=;i<=n;i++)
{
scanf ("%d",&flag); if(flag==) printf("%d\n",heap[]);
else if(flag==) del();
else scanf ("%d",&x),add(x);
} return ;
}

模板在此!!!

想不到居然写了70行......


之前写的跟屎一样......

最新模板在此:

 #include <cstdio>
#include <algorithm>
using std::swap;
typedef long long LL;
const int N = ; struct SmallHeap {
LL h[N];
int top;
SmallHeap() {
top = ;
}
inline void up(int p) {
while(p != && h[p] < h[p >> ]) {
swap(h[p], h[p >> ]);
p = p >> ;
}
return;
}
inline void down(int p) {
int s = p << ;
while(s <= top) {
if(s < top && h[s] > h[s | ]) {
s = s | ;
}
if(h[s] < h[p]) {
swap(h[s], h[p]);
p = s;
s = p << ;
}
else break;
}
return;
}
inline void insert(LL a) {
h[++top] = a;
up(top);
return;
}
inline void del(int p) {
h[p] = h[top--];
up(p);
down(p);
return;
}
inline LL gettop() {
return h[];
}
inline void pop() {
h[] = h[top--];
down();
return;
}
}heap; int main() {
LL n, x;
scanf("%lld", &n);
for(int i = ; i <= n; i++) {
scanf("%lld", &x);
heap.insert(x);
}
LL ans = ;
for(int i = ; i < n; i++) {
LL temp = heap.gettop();
heap.pop();
temp += heap.gettop();
heap.pop();
ans += temp;
heap.insert(temp);
}
printf("%lld", ans);
return ;
}

小根堆

P3378 堆の模板的更多相关文章

  1. 洛谷P3378 【模板】堆

    P3378 [模板]堆 160通过 275提交 题目提供者HansBug 标签 难度普及- 提交  讨论  题解 最新讨论 经实际测试 堆的数组开3000- 题目有个问题 为什么这个按课本堆标准打的- ...

  2. P3378 【模板】堆 (内含左偏树实现)

    P3378 [模板]堆 题解 其实就是一个小根堆啦,STL就可以解决,但是拥有闲情雅致的我学习了Jelly_Goat的左偏树,增加了代码长度,妙啊 Solution 1 STL STL 里面prior ...

  3. P3378 堆(模板)

    P3378 [模板]堆 题目描述 给定一个数列,初始为空,请支持下面三种操作: 给定一个整数 x,请将 x 加入到数列中. 输出数列中最小的数. 删除数列中最小的数(如果有多个数最小,只删除 1 个) ...

  4. 可并堆模板题-mergeable heap

    Description 有n个点,第i个点标号为i,有两种操作:0 x y 表示把x所在堆和y所在堆合并.1 x 表示询问x所在堆的最小权. Input 第一行两个整数n,m,表示有n个点m个操作. ...

  5. 【luogu P3378 堆】 模板

    题目链接:https://www.luogu.org/problemnew/show/P3378 是堆的模板...我懒,STL da fa is good #include <iostream& ...

  6. Luogu P3378 【模板】堆

    ((^ 0.0 ^)    )~ 堆是一个完全二叉树,对于小根堆,所有父节点<=子节点,下标就和线段树是一样的 在STL里就是优先队列 只有堆顶元素可以操作(询问或弹出). 加入新元素时x,he ...

  7. 堆模板(pascal)洛谷P3378

    题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 输入输出格式 输入格式: ...

  8. 洛谷 P3378 【模板】堆

    如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 输入输出格式 输入格式: 第一行包含 ...

  9. P3378 堆【模板】 洛谷

    https://www.luogu.org/problem/show?pid=3378 题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 ...

随机推荐

  1. Spring Boot基础:Spring Boot简介与快速搭建(1)

    1. Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的创建.运行.调试.部署等. Spring Boot默认使用tomca ...

  2. jQuery的each使用陷阱

    注意:jQuery使用each()函数进行循环时发现return false不能阻止程序继续向下执行 原因如下: (1)开始还以为是jQuery的each()函数是异步执行的,所以导致出错,其实不是. ...

  3. 莫烦keras学习自修第三天【回归问题】

    1. 代码实战 #!/usr/bin/env python #!_*_ coding:UTF-8 _*_ import numpy as np # 这句话不知道是什么意思 np.random.seed ...

  4. Docker 部署应用、jar 工程 docker 方式部署

    https://blog.csdn.net/jiangyu1013/article/details/81988342

  5. 【python练习题】程序13

    #题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个"水仙花数",因为153= ...

  6. Visual Studio 2017 and Swagger: Building and Documenting Web APIs

    Swagger是一种与技术无关的标准,允许发现REST API,为任何软件提供了一种识别REST API功能的方法. 这比看起来更重要:这是一个改变游戏技术的方式,就像Web服务描述语言一样WSDL( ...

  7. Nginx 缓存针对打开的文件句柄与原文件信息

    L:108 open_file_cache syntax: open_file_cache off;   open_file_cache max=N[inactive=time](inactive表示 ...

  8. 洛谷 P1498 南蛮图腾

    题目描述 自从到了南蛮之地,孔明不仅把孟获收拾的服服帖帖,而且还发现了不少少数民族的智慧,他发现少数民族的图腾往往有着一种分形的效果,在得到了酋长的传授后,孔明掌握了不少绘图技术,但唯独不会画他们的图 ...

  9. 【NLP】大白话讲解word2vec到底在做些什么

    转载自:http://blog.csdn.net/mylove0414/article/details/61616617 词向量 word2vec也叫word embeddings,中文名“词向量”, ...

  10. JVM是如何处理异常的

    JVM处理异常 异常处理的两大组成要素是抛出异常和捕获异常.这两大要素共同实现程序控制流的非正常转移. 抛出异常可分为显式和隐式两种.显式抛异常的主体是应用程序,指的是在程序中使用throw关键字,手 ...