Pagini recente » Cod sursa (job #689352) | Cod sursa (job #667497) | Cod sursa (job #1161732) | Cod sursa (job #2776795) | Cod sursa (job #2410103)
#include <fstream>
#include <algorithm>
#define DIM 100010
using namespace std;
ifstream fin ("avioane.in");
ofstream fout ("avioane.out");
long long d[DIM],sol;
int poz[DIM],v[DIM];
int n,i;
void solve (int st, int dr){
if (st > dr)
return;
int mid = (st+dr)/2;
/// calculam d[mid];
/// optimul pt mid nu se poate afla in alt interval decat poz[st-1]...min(poz[dr+1],mid)
/// fixez clasa bussiness si caut economy
for (int i=poz[st-1];i<=poz[dr+1] && i<=mid;i++){
if (1LL*(mid-i)*v[i] + 1LL*(n-mid+1)*v[mid] > d[mid]){
d[mid] = 1LL*(mid-i)*v[i] + 1LL*(n-mid+1)*v[mid];
poz[mid] = i;
}
}
solve (st,mid-1);
solve (mid+1,dr);
}
int main (){
fin>>n;
for (i=1;i<=n;i++)
fin>>v[i];
sort (v+1,v+n+1);
poz[0] = 1, poz[n+1] = n;
solve (1,n);
sol = 0;
for (i=1;i<=n;i++)
sol = max (sol,d[i]);
fout<<sol;
return 0;
}