其实这个题完全不需要用手写堆,只需要一遍遍sort就行了…… 但是! 为了练习手写堆,还是用手写堆做了. 在做本题之前,如果你没有什么思路的话,建议先做Luogu的合并果子. 好,假设你已经做过了合并果子了.那么正式开始本题: 相信许多人都已经知道了这道题就是合并果子,但是还不知道它是怎样转化成合并果子的,其实很简单:比如说9 7 6 5 3,有些同学可能会想:每次我砍最大的,然后剩下的不就少了.其实不然,因为不一定一次只能砍一个,可以砍两个或两个以上.不多说,我把上面例子的最优策略讲出来大概就…
\(dijkstra\) 算法的堆优化,时间复杂度为\(O(n+m)\log n\) 添加数组\(id[]\)记录某节点在堆中的位置,可以避免重复入堆从而减小常数 而这一方法需要依托手写堆 #include"cstdio" #include"cstring" #include"iostream" #include"algorithm" #include"bitset" using namespace std…
http://uoj.ac/problem/111 好像NOIP里面的题目...有好多都是...能通过xjbg剪枝来...AC题目的? 得好好学一下这些剪枝黑科技了... 思路:我觉得这位大佬说的很完善了:http://blog.csdn.net/herano/article/details/58639052 竟然能卡分块暴力...hack数据不良心...不过好像最坏情况的边实在是太多了,没办法改变MLE的结局...?(其实3000000还好吧?) 然后就是xjbg优化了,对每一个块删除重复跑的…
今天整理最近的考试题 发现一个东西叫做优先队列 priority_queue(说白了就是大根堆) 但是 我对堆的了解还是很少的 所以 我决定手写一个堆 于是我写了一个简单的堆 手写的堆说白了就是个二叉树 能不更新维护的二叉树,每次维护的时间为logn 但是各种查询(empty,top什么的)时间为1: 感觉这个堆还写的像模像样 于是兴冲冲的去ac特别简单题合并果子 没a: 改了好久才ac 现在贴一下这个代码 来,上代码: #include<cstdio> using namespace std…
题目1 : 优化延迟 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho编写了一个处理数据包的程序.程序的输入是一个包含N个数据包的序列.每个数据包根据其重要程度不同,具有不同的"延迟惩罚值".序列中的第i个数据包的"延迟惩罚值"是Pi.如果N个数据包按照<Pi1, Pi2, ... PiN>的顺序被处理,那么总延迟惩罚 SP=1*Pi1+2*Pi2+3*Pi3+...+N*PiN(其中i1, i2, ... iN是1,…
跟gxy大神还有yzh大神学了学手写的堆,应该比stl的优先队列快很多. 其实就是维护了一个二叉堆,写进结构体里,就没啥了... 据说达哥去年NOIP靠这个暴力多骗了分 合并果子... template<class T> struct heap{//小根堆 T q[mxn<<];int sz; heap(){sz=;} inline void push(T x){ q[++sz]=x; ;j;i=j,j>>=) if(q[i]<q[j]) swap(q[i],q[…
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1941  Solved: 595 [Submit][Status][Discuss] Description iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与元素之间可以互相转换:能量守恒……. 能量守恒……iPig…
一般主程序中拿堆顶元素 x=h[]; h[]=h[top--]; down(); 在堆尾加入元素 h[++top]=x; up(top); 上浮下沉操作 inline void up(int x) { ) return; ]>h[x]) { swap(h[x>>],h[x]); up(x>>); } } inline void down(int x) { x<<=; if (x>top) return; ]<h[x]) x++; ]>h[x])…
颓废.. #include <cstdio> #include <cstring> #include <algorithm> using namespace std; , maxm=1e6+, INF=; struct Heap_node{ int value, id; void reset(){ value=, id=; return; } }; bool operator< (Heap_node A, Heap_node B){ if (A.value>…
手写STL,卡常专用. node为变量类型,可以自由定义,以下不再赘述. 1.stack(栈) 开一个数组,和一个top指针,压栈时++,弹栈时--即可. struct stack{ int tp;node st[N]; node top(){return st[tp];} void push(node x){st[++tp]=x;} void pop(){--tp;} bool empty(){return !tp;} void size(){return tp;} ;} }s; 2.queu…