Pagini recente » Cod sursa (job #994709) | Cod sursa (job #1421198) | Cod sursa (job #1213770) | Cod sursa (job #545599) | Cod sursa (job #2340802)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("avioane.in");
ofstream g("avioane.out");
int v[100005],n,poz[100005];
long long ans[100005];
void rezv (int left, int right)
{
int mid=(left+right)/2;
for(int i=poz[left-1]; i<=poz[right+1] && i <= mid;i++)
if((mid-i+1)*(1LL*v[i]) > ans[mid])
{
ans[mid]=(mid-i+1)*(1LL*v[i]);
poz[mid]=i;
}
if(mid >= left+1)
rezv(left, mid-1);
if(right >= mid+1)
rezv(mid+1, right);
}int i;
long long sol;
int main()
{
f>>n;
for (i=1;i<=n;i++)
{
f>>v[i];
}
sort (v+1,v+n+1);
poz[0]=1;
poz[n+1]=n;
rezv(1,n);
for(i=2;i<=n;i++)
{
sol=max(sol,(n-i+1)*(1LL*v[i])+ans[i-1]);
}
g<<sol;
return 0;
}