CodeVS 1063 合并果子 题解

来源:互联网 发布:网络规划设计师教程pdf 编辑:程序博客网 时间:2024/05/16 14:58
#include <cstdio>#include <iostream>using namespace std;int a[10000+2];int N, ans;void Heap_adjust(int s, int e){a[0] = a[s];for(int i = s+s; i<=e; i += i){if(i<e && a[i+1]<a[i]) ++i;if(a[i]>=a[0]) break;a[s] = a[i];s = i;}a[s] = a[0];}int main() {scanf("%d", &N);for(int i = 1; i<=N; ++i) scanf("%d", a+i);for(int i = N/2; i; --i) Heap_adjust(i, N);for(int i = N; i>1; --i){swap(a[1], a[i]);Heap_adjust(1, i-1);ans += a[1]+= a[i];Heap_adjust(1, i-1);}printf("%d\n", ans);return 0;}

原创粉丝点击