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

很多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. WEX5中ajax跨域访问的几种方式

    1.使用jsonp方式 使用jsonp访问的话,前端需要把回调函数名传递给后端,后端执行完后也需要把回调函数传回给前端,默认情况下ajax自动生成一个回调函数名,后端可以通过String callba ...

  2. HTML5-Video视频-基础篇

    展示视频 视频 <video width=" controls="controls"> <source src="movie.mp4" ...

  3. 资源推荐:特意挑选了11个可以称得上“神器”的Windows工具下载

    特意挑选了11个可以称得上“神器”的Windows工具,安装包获取方式在文末. 以下神器包含:OCR文字识别.百度云超速下载工具.本地文件搜索工具.软件卸载器.本地视频播放器.图片去水印神器.百度文库 ...

  4. SpringBoot之get请求404

    后台:SpringBoot 前台:VUE 异常:调get接口,返回404 场景:get请求传参,后台返回n条数据,不传参则返回所有 原因:原请求url为"~/one/{param}" ...

  5. JAVA spring配置文件总结

    首先来看一个标准的Spring配置文件 applicationContext.xml <?xml version="1.0" encoding="UTF-8&quo ...

  6. BZOJ3730震波——动态点分治+线段树(点分树套线段树)

    题目描述 在一片土地上有N个城市,通过N-1条无向边互相连接,形成一棵树的结构,相邻两个城市的距离为1,其中第i个城市的价值为value[i].不幸的是,这片土地常常发生地震,并且随着时代的发展,城市 ...

  7. 使用开源项目xutils3完成下载

    上一次自己写了一个多线程断点续传下载的demo,过于麻烦,bug超多,所以我学习使用xutils来完成此功能. 先将xutils依赖搭建好(上一篇博客已经具体写了方法) 先看看效果图: 下面开始代码的 ...

  8. ☆ [HDU2157] How many ways?? 「矩阵乘法求路径方案数」

    传送门:>Here< 题意:给出一张有向图,问从点A到点B恰好经过k个点(包括终点)的路径方案数 解题思路 一道矩阵乘法的好题!妙哉~ 话说把矩阵乘法放在图上好神奇,那么跟矩阵唯一有关的就 ...

  9. codeforces553C Love Triangles

    题目链接:codeforces553C Love Triangles 我们来看一下对于一个合法三角形可能出现的边 我们发现,在确定了两边之后,第三条边是什么也就随之确定了 我们用\(1\)表示\(lo ...

  10. CODEFORCES掉RATING记 #5

    ​ 比赛:Codeforces Round #429 (Div. 2) ​ 时间:2017.8.1晚 这次感觉状态不好,就去打div2了 ​ A:有\(26\)种颜色的气球,每种的数量不一样,你要把这 ...