你把两堆合并后,要把合并的新堆加回去
by Small_Tang @ 2022-02-19 14:34:51
我没用对,用的 `vector<int>` 直接就过了,数据量不大,`upper_bound()` 查找效率 $\log N$,然后插入对应位置,总时间 $N \log N$
```cpp
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> v;
int main(){
int n, num, ans=0;
cin >> n;
for (int i=0; i<n; i++) {
cin >> num;
v.push_back(num);
}
sort(v.begin(), v.end());
while(v.size() > 2) {
int n1 = *v.begin();
v.erase(v.begin());
int n2 = *v.begin();
v.erase(v.begin());
ans += (n1 + n2);
int pos = upper_bound(v.begin(), v.end(), n1+n2)-v.begin();
v.insert(v.begin()+pos, n1+n2);
}
cout << v[0] + v[1] + ans << endl;
return 0;
}
```
by wali_robot @ 2022-02-20 07:42:53