Pagini recente » Cod sursa (job #3216529) | Cod sursa (job #582312) | Cod sursa (job #1048206) | Cod sursa (job #798665) | Cod sursa (job #586253)
Cod sursa(job #586253)
#include<cstdio>
#include<vector>
#include<algorithm>
#define infile "avioane.in"
#define outfile "avioane.out"
#define nMax 100013
#define ll long long
using namespace std;
int v[nMax];
int w[nMax];
int n;
ll sol;
inline ll getSum(int itMin, int itMax) {
return (ll)v[itMin] * (itMax - itMin) + (ll)v[itMax] * (n - itMax + 1);
}
void read() {
scanf("%d\n", &n);
for(int i = 1; i <= n; ++i)
scanf("%d", &v[i]);
}
void solve() {
sort(v+1, v+n+1);
for(int i = n; i > 0; --i)
if(v[i] == v[i+1]) w[i] = w[i+1];
else w[i] = i+1;
sol = max(sol, (ll)v[1] * n);
if(n == 1) return;
/*
for(int i = 1; i <= n; ++i)
printf("%d ", v[i]);
printf("\n");
*/
int itMin = 1;
for(int itMax = 2; itMax <= n; ++itMax) {
for(int i = max(1, itMin - 213); i <= itMin; ++i)
sol = max(sol, getSum(i, itMax));
while(w[itMin] < itMax && getSum(w[itMin], itMax) >= getSum(w[itMin], itMax)) {
sol = max(sol, getSum(itMin, itMax));
itMin = w[itMin];
}
}
}
void write() {
printf("%lld\n", sol);
}
int main() {
freopen(infile, "r", stdin);
freopen(outfile, "w", stdout);
read();
solve();
write();
fclose(stdin);
fclose(stdout);
return 0;
}