今天整理最近的考试题

发现一个东西叫做优先队列

priority_queue(说白了就是大根堆)

但是

我对堆的了解还是很少的

所以

我决定手写一个堆

于是我写了一个简单的堆

手写的堆说白了就是个二叉树

能不更新维护的二叉树,每次维护的时间为logn

但是各种查询(empty,top什么的)时间为1;

感觉这个堆还写的像模像样

于是兴冲冲的去ac特别简单题合并果子

没a;

改了好久才ac

现在贴一下这个代码

来,上代码:

#include<cstdio>

using namespace std;

int heap[],num,jkl,cur,n,ans=;

char ch;

void swap(int &a,int &b)//交换函数
{
int t=a;
a=b,b=t;
} void qread(int &x)//读入优化
{
x=,jkl=;ch=getchar();
while(ch>''||ch<''){if(ch=='-') jkl=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+(int)(ch-'');ch=getchar();}
x*=jkl;
} void heap_up(int now)//向上维护(添加元素时)
{
if(now==) return;
int cnm=now/;
if(heap[cnm]>heap[now])
{
swap(heap[cnm],heap[now]);
heap_up(cnm);
}
} void heap_push(int kol)//添加元素同时维护
{
num++;
heap[num]=kol;
if(num==) return ;
heap_up(num);
} void heap_down(int now)//向下维护(删除元素时)
{
int l,r;
if(now*+<=num)
{
l=now*,r=now*+;
if(heap[l]<heap[now])
{
if(heap[r]<heap[l])
{
swap(heap[r],heap[now]);
heap_down(r);
}
else
{
swap(heap[l],heap[now]);
heap_down(l);
}
}
else
{
if(heap[r]<heap[now])
{
swap(heap[r],heap[now]);
heap_down(r);
}
}
}
else
{
if(now*<=num)
{
l=now*;
if(heap[l]<heap[now]) swap(heap[l],heap[now]);
}
}
} void heap_pop()//删除元素
{
heap[]=heap[num];
num--;
heap_down();
} int heap_top(){return heap[];}//查询堆顶元素 bool heap_empty(){return num==?true:false;}//查询是否为空 int main()
{
qread(n);
for(int i=;i<=n;i++)
{
qread(cur);
heap_push(cur);
}
for(int i=;i<n;i++)
{
cur=heap_top();
heap_pop();
cur+=heap_top();
heap_pop();
heap_push(cur);
ans+=cur;
}
printf("%d\n",ans);
return ;
}

AC日记——手写堆ac合并果子(傻子)的更多相关文章

  1. AC日记——二叉堆练习3 codevs 3110

    3110 二叉堆练习3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 给定N(N≤500,000)和N个整 ...

  2. Luogu [P1334] 瑞瑞的木板(手写堆)

    其实这个题完全不需要用手写堆,只需要一遍遍sort就行了…… 但是! 为了练习手写堆,还是用手写堆做了. 在做本题之前,如果你没有什么思路的话,建议先做Luogu的合并果子. 好,假设你已经做过了合并 ...

  3. spfa+剪枝 或者 dij+手写堆+剪枝 UOJ 111

    http://uoj.ac/problem/111 好像NOIP里面的题目...有好多都是...能通过xjbg剪枝来...AC题目的? 得好好学一下这些剪枝黑科技了... 思路:我觉得这位大佬说的很完 ...

  4. 手写堆优化dijkstra

    \(dijkstra\) 算法的堆优化,时间复杂度为\(O(n+m)\log n\) 添加数组\(id[]\)记录某节点在堆中的位置,可以避免重复入堆从而减小常数 而这一方法需要依托手写堆 #incl ...

  5. [转载] 管Q某犇借的手写堆

    跟gxy大神还有yzh大神学了学手写的堆,应该比stl的优先队列快很多. 其实就是维护了一个二叉堆,写进结构体里,就没啥了... 据说达哥去年NOIP靠这个暴力多骗了分 合并果子... templat ...

  6. hihoCoder 第136周 优化延迟(二分答案+手写堆)

    题目1 : 优化延迟 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho编写了一个处理数据包的程序.程序的输入是一个包含N个数据包的序列.每个数据包根据其重要程度不同 ...

  7. BZOJ 1975 魔法猪学院(A*+手写堆)

    1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1941  Solved: 595 [Submit][Sta ...

  8. 手写堆_C++

    一般主程序中拿堆顶元素 x=h[]; h[]=h[top--]; down(); 在堆尾加入元素 h[++top]=x; up(top); 上浮下沉操作 inline void up(int x) { ...

  9. 手写堆的dijkstra

    颓废.. #include <cstdio> #include <cstring> #include <algorithm> using namespace std ...

随机推荐

  1. Telegram传奇:俄罗斯富豪、黑客高手、极权和阴谋…

    说了很久要写Telegram的故事,一直拖延没有写.在我拖延的这段时间里面,Telegarm继续快速增长,前几天,在旧金山的TechCrunch Disrupt活动上,创始人Durov说现在Teleg ...

  2. javascript --- 再谈词法分析

    javascript代码是如何执行的呢,分为六个步骤(就像把大象装进冰箱总共分几步?): 第一步:载入第一个js代码段(注:script标签对内的代码或是引用js代码,这也说明js并不是一行一行(单纯 ...

  3. Jquery easyui Tree的简单使用

    Jquery easyui Tree的简单使用 Jquery easyui 是jQuery EasyUI是一组基于jQuery的UI插件集合,而jQuery EasyUI的目标就是帮助web开发者更轻 ...

  4. How to Use Telnet to Test SMTP Communication

    Topic Last Modified: 2005-05-24 Telnet is an extremely useful tool for troubleshooting issues relate ...

  5. Android-Application

    1:Application是什么? Application和Activity,Service一样,是android框架的一个系统组件,当android程序启动时系统会创建一个 application对 ...

  6. genymotion虚拟机启动失败

    错误提示如下: Make sure that you have installed it correctly before starting Genymotion. 解决方法(重启VirtualBox ...

  7. 怎样在VS2010中打开VS2012的项目

    VS2012中对C#的支持度非常好,不管是编写方便程度(不需要插件就能高亮代码及代码自动提示功能),还对MFC的一些功能优化很多. 我们可以修改两个工程文件来把VS2012的工程文件一直到VS2010 ...

  8. 生命游戏/Game of Life的Java实现(转)

    首先简单介绍一下<生命游戏> 生命游戏其实是一个零玩家游戏.它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死 ...

  9. Cent OS服务器配置(JDK+Tomcat+MySQL)

    本文摘自:Cent OS服务器配置(JDK+Tomcat+MySQL) 学习tar解压 解压 tar 文件 tar -zxvf apache-tomcat-6.0.35.tar.gz tomcat   ...

  10. animation of android (1)

    android把动画的模式分为:property animation,view animation,drawable animation. view animation:给出动画的起止状态,并且通过一 ...