Cod sursa(job #1058919)

Utilizator enedumitruene dumitru enedumitru Data 15 decembrie 2013 22:59:30
Problema Avioane Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.61 kb
#include<fstream>
#include<algorithm>
#define Nmax 100002
#define LL long long
using namespace std;
ifstream f("avioane.in"); ofstream g("avioane.out");
int n,i,s[Nmax];
LL profit,a[Nmax],b[Nmax];
void calc(int p, int u)
{   if (p>u) return;
    int i,m=(p+u)>>1;
    for(i=s[p-1];i<=min(s[u+1],m);++i)
	{	LL c=(m-i+1)*a[i];
        if(b[m]<c) b[m]=c, s[m]=i;
	}
    calc(p,m-1); calc(m+1,u);
}
int main ()
{   f>>n;
    for(i=1;i<=n;++i) f>>a[i];
    sort(a+1,a+n+1); s[n+1]=n; calc(1,n);
    for(i=2;i<=n;++i) profit=max(profit,b[i-1]+a[i]*(n-i+1));
    g<<profit<<'\n'; g.close(); return 0;
}