蒟蒻求教qaq:用二分和队列,结果#4 WA了
#include<iostream>
#include<deque>
#include<algorithm>
#include<cstdio>
#define ll long long
using namespace std;
deque <ll> a;
ll n,w[10005],i,k,res;
bool fir(){
if(k<=a[0]){
a.push_front(k);
return 0;
}
if(k>=a[a.size()-1]){
a.push_back(k);
return 0;
}
return 1;
}
void ef(ll l,ll r){
//cout<<l<<" "<<r<<endl;
if(r-l<=1){
a.insert(a.begin()+l+1,k);
return;
}
ll mid=(l+r)>>1;
if(k==a[mid]){
a.insert(a.begin()+mid+1,k);
return;
}
if(k<a[mid]){
ef(l,mid);
}
else{
ef(mid+1,r);
}
}
int main(){
//freopen("!read.txt","r",stdin);
cin>>n;
for(i=1;i<=n;i++){
cin>>w[i];
}
sort(w+1,w+1+n);
for(i=1;i<=n;i++){
a.push_back(w[i]);
}
while(a.size()>1){
k=a[0]+a[1];
res+=k;
a.pop_front();
a.pop_front();
if(fir())ef(0,a.size()-1);
}
cout<<res<<endl;
return 0;
}