Description
Input
Output
Sample Input
1
3
4
6
12
Sample Output
HINT
上面的样例输入给出了前面描述的示例情形
对于每一个测试点,如果写到输出文件中的答案正确,则得到该测试点100%的分数,否则得零分。30%的输入数据满足n≤20。60%的输入数据满足n≤10 000。
贴个题解。
http://hi.baidu.com/cao_ximeng/blog/item/00f3d81c0c66071134fa415b
由于我的蒟蒻。。这道题的调试都用在调堆上了。。。一开始怎么也想不到是映射堆写跪了。。。
在对维护中,一个很重要的步骤被我给忽略了。。在删除堆顶的元素的时候,只要把最后一个元素swap上来再向下推。
但是!!!对于堆中元素的更新就必须考虑往上走的情况了!!
因为堆中的每个元素如果不是在最底层,会有相应的两个儿子,这两个儿子是没有直接关系的。对于堆有初步了解的人都知道堆顶元素的左子树可以全部小于(或大于)右子树。
那么在删除堆中的元素的时候,swap上来的最后一个元素有可能是仅比堆顶小一点的值。。。
那么就要先往上走了。。。
还有一点。如果删除的刚好就是最后一个元素。直接删之。。。我蒟蒻地没判断。。。让空单元到堆里面乱窜。。。
太讽刺了。。。竟然还要恶补堆的基本操作。。。我该是有多弱啊。。。
AC CODE
program bzoj_1150;
var heap,pi,l,r:array[0..101000] of longint;
//======================================================
procedure swap(x,y:longint);
var tt:longint;
begin
end;
//======================================================
procedure ins(x:longint);
begin
end;
//======================================================
procedure del(x:longint);
var g,h,i:longint;
begin
end;
//======================================================
procedure init;
var i:longint;
begin
end;
//======================================================
procedure main;
var now,i,tmp:longint;
begin
end;
//======================================================
begin
end.