P3378 堆の模板
如果不是可并堆/带修堆/卡常题,一般都用优先队列实现。
很多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 堆の模板的更多相关文章
- 洛谷P3378 【模板】堆
P3378 [模板]堆 160通过 275提交 题目提供者HansBug 标签 难度普及- 提交 讨论 题解 最新讨论 经实际测试 堆的数组开3000- 题目有个问题 为什么这个按课本堆标准打的- ...
- P3378 【模板】堆 (内含左偏树实现)
P3378 [模板]堆 题解 其实就是一个小根堆啦,STL就可以解决,但是拥有闲情雅致的我学习了Jelly_Goat的左偏树,增加了代码长度,妙啊 Solution 1 STL STL 里面prior ...
- P3378 堆(模板)
P3378 [模板]堆 题目描述 给定一个数列,初始为空,请支持下面三种操作: 给定一个整数 x,请将 x 加入到数列中. 输出数列中最小的数. 删除数列中最小的数(如果有多个数最小,只删除 1 个) ...
- 可并堆模板题-mergeable heap
Description 有n个点,第i个点标号为i,有两种操作:0 x y 表示把x所在堆和y所在堆合并.1 x 表示询问x所在堆的最小权. Input 第一行两个整数n,m,表示有n个点m个操作. ...
- 【luogu P3378 堆】 模板
题目链接:https://www.luogu.org/problemnew/show/P3378 是堆的模板...我懒,STL da fa is good #include <iostream& ...
- Luogu P3378 【模板】堆
((^ 0.0 ^) )~ 堆是一个完全二叉树,对于小根堆,所有父节点<=子节点,下标就和线段树是一样的 在STL里就是优先队列 只有堆顶元素可以操作(询问或弹出). 加入新元素时x,he ...
- 堆模板(pascal)洛谷P3378
题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 输入输出格式 输入格式: ...
- 洛谷 P3378 【模板】堆
如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 输入输出格式 输入格式: 第一行包含 ...
- P3378 堆【模板】 洛谷
https://www.luogu.org/problem/show?pid=3378 题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 ...
随机推荐
- springmvc中model可以封装的数据类型
查看源码可以知道,model中可以存放的数据类型 Model addAttribute(String var1, @Nullable Object var2); Model addAttribute( ...
- Json dump
json 模块提供了一种很简单的方式来编码和解码JSON数据. 其中两个主要的函数是 json.dumps() 和 json.loads() , 要比其他序列化函数库如pickle的接口少得多. 下面 ...
- Python OpenCV人脸识别案例
■环境 Python 3.6.0 Pycharm 2017.1.3 ■库.库的版本 OpenCV 3.4.1 (cp36) ■haarcascades下载 https://github.com/ope ...
- 用 Python分析朋友圈好友的签名
需要用到的第三方库: numpy:本例结合wordcloud使用 jieba:对中文惊进行分词 PIL: 对图像进行处理(本例与wordcloud结合使用) snowlp:对文本信息进行情感判断 wo ...
- 莫烦theano学习自修第三天【共享变量】
1. 代码实现 #!/usr/bin/env python #! _*_ coding:UTF-8 _*_ import numpy as np import theano.tensor as T i ...
- RuntimeError: cryptography requires setuptools 18.5 or newer, please upgrade to a newer version of setuptool
setuptool 太老了,更新下: pip install --upgrade setuptools
- 解析xml文件 selectSingleNode取不到节点
今天在做批量生成XML的时候,碰到一个情况 解析xml文件 selectSingleNode一直返回NULL. XML的格式开头有一句这个<CE401Message xmlns="ht ...
- ES 6 系列 - Promise
一.含义 是异步编程的一种解决方案,es 6 将其变成了标准. 简单的说是一个容器,里面保存了某个未来才会结束的事件(通常是一个异步操作)的结果.语法上, Promise 是一个对象,从它可以获取异步 ...
- Vue数组更新及过滤排序
前面的话 Vue为了增加列表渲染的功能,增加了一组观察数组的方法,而且可以显示一个数组的过滤或排序的副本.本文将详细介绍Vue数组更新及过滤排序 变异方法 Vue 包含一组观察数组的变异方法,它们将会 ...
- luogu3702-[SDOI2017]序列计数
Description Alice想要得到一个长度为nn的序列,序列中的数都是不超过mm的正整数,而且这nn个数的和是pp的倍数. Alice还希望,这nn个数中,至少有一个数是质数. Alice想知 ...