Pagini recente » Cod sursa (job #937725) | Cod sursa (job #1062811) | Cod sursa (job #914231) | Cod sursa (job #419774) | Cod sursa (job #644988)
Cod sursa(job #644988)
#include<stdio.h>
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("avioane.in");
ofstream g("avioane.out");
#define MaxN 100100
#define ll long long
int N,A[MaxN],B[MaxN];
ll MAX;
void citire(void)
{
f >> N;
for(int i=1;i<=N;i++)
f >> A[i];
}
inline int min(int a,int b)
{
return a<b ? a:b;
}
inline int max(int a,int b)
{
return a>b ? a:b;
}
void CreareB(void)
{
int PozF = 1;
sort(A+1,A+N+1);
for(int i=1;i<=N;i++)
if(A[i] != A[i-1])
{
PozF = A[i+1] != A[i] ? i+ A[i] / (A[i+1]-A[i]) : N;
for(int j=i;j<=PozF;j++)
{
B[j] = max(B[j],A[i]*(j-i+1));
(A[j+1] != A[i]) ? PozF = min(PozF,j + (A[i]*(j-i+1)) / (A[j+1]-A[i])) : N;
}
}
}
void Numarare(void)
{
for(int i=1;i<=N;i++)
if(MAX < A[i]*(N-i+1) + B[i-1])
MAX = A[i]*(N-i+1) + B[i-1];
}
int main()
{
citire();
CreareB();
Numarare();
g << MAX;
return 0;
}