Pagini recente » Cod sursa (job #2602525) | Cod sursa (job #859225) | Cod sursa (job #1802094) | Cod sursa (job #2856756) | Cod sursa (job #1224300)
#include<fstream>
#include<algorithm>
using namespace std;
const int NM = 100005;
int a[NM], p[NM];
long long mx[NM];
void rec(int l, int r){
int i,m = (l+r)>>1;
mx[m] = -1;
for(i=p[l-1];i<p[r+1];++i)
{
if(i > m) break;
if(1LL * (m-i+1) * a[i] > mx[m] || mx[m] < 0)
{
mx[m] = 1LL * (m-i+1) * a[i];
p[m] = i;
}
}
if(l <= m-1) rec(l,m-1);
if(m+1 <= r) rec(m+1,r);
}
int main(){
ifstream cin("avioane.in");
ofstream cout("avioane.out");
int i,N;
cin >> N;
for(i=1;i<=N;++i) cin >> a[i];
sort(a+1,a+N+1);
p[N+1] = N;
rec(1,N);
long long SMAX = 0;
for(i=1;i<=N;++i)
SMAX = max(SMAX, mx[i-1] + 1LL* a[i] * (N-i+1));
cout << SMAX << '\n';
return 0;
}