Cod sursa(job #652019)

Utilizator indestructiblecont de teste indestructible Data 22 decembrie 2011 18:44:55
Problema Avioane Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <stdio.h>
#include <algorithm>
#define NMAX 100005
#define ll long long
using namespace std;
int n,A[NMAX];
ll B[NMAX],act,rez;
inline ll value(int dr,int st)
{
	return (ll)A[st]*(dr-st+1);
}
void rezolva(int dr)
{
	int i=1,step=(1<<16);
	while (step)
	{
		if (i+step<=dr && value(dr,i+step)>value(dr,i))
		{
			i+=step;
			continue ;
		}
		if (i-step>0 && value(dr,i-step)>value(dr,i))
		{
			i-=step;
			continue ;
		}
		step/=2;
	}
	B[dr]=value(dr,i);
}
int main()
{
	freopen("avioane.in","r",stdin);
	freopen("avioane.out","w",stdout);
	scanf("%d",&n);
	int i;
	for (i=1; i<=n; i++)
		scanf("%d",&A[i]);
	sort(A+1,A+n+1);
	for (i=1; i<=n; i++)
		rezolva(i);
	for (i=1; i<=n; i++)
	{
		act=B[i-1]+(ll)A[i]*(n-i+1);
		if (act>rez)
			rez=act;
	}
	printf("%lld\n",rez);
	return 0;
}