#include <stdio.h> #define INF 50001 __int64 heap[INF],arr[INF], size = 0; void push(__int64 x){ __int64 i = size++; while(i > 0){ __int64 j = (i - 1) / 2; if(heap[j] <= x) break; heap[i] = heap[j]; i = j; } heap[i] = x; } __int64 pop(){ __int64 res = heap[0], temp = heap[--size]; __int64 i = 0; while(i * 2 + 1 < size){ __int64 j = i * 2 + 1; if(j + 1 < size && heap[j + 1] < heap[j]) j++; if(heap[j] >= temp) break; heap[i] = heap[j]; i = j; } heap[i] = temp; return res; } int main(){ __int64 x,i,m,a,b; __int64 temp,num=0; scanf("%I64d",&m); for(i=0;i<m;i++) { scanf("%I64d", &x); push(x); } while(m!=1) { m--; a=pop(); b=pop(); if(m!=1) push(a+b); num=num+a+b; } printf("%I64d",num); return 0; }
poj3253解题报告c语言
最新推荐文章于 2022-03-08 09:19:38 发布
本文介绍了一个使用C语言实现的最小堆数据结构,并通过一个具体的应用案例展示了如何利用该数据结构来解决特定问题。通过对输入的数据进行堆排序并逐步合并最小元素的方式,实现了最优的计算过程。

1066

被折叠的 条评论
为什么被折叠?



