#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 发布