Pagini recente » Cod sursa (job #1386310) | Cod sursa (job #665737) | Cod sursa (job #129930) | Cod sursa (job #1144424) | Cod sursa (job #1181156)
#include<stdio.h>
#include<algorithm>
using namespace std;
const int NMAX = 1e5;
int n, ticket[NMAX + 5], deque[NMAX + 5];
long long calc (int economy, int business) {
return (long long)ticket[economy] * (business - economy) + ticket[business] * (n - business + 1);
}
int calcBusiness (int i, int j) {
if(ticket[i] == ticket[j])
return NMAX + 1;
return 1 + (ticket[j] * j - ticket[i] * i) / (ticket[j] - ticket[i]);
}
int main() {
freopen("avioane.in", "r", stdin);
freopen("avioane.out", "w", stdout);
int i, left, right;
long long res;
scanf("%d", &n);
for(i = 1; i <= n; ++ i)
scanf("%d", &ticket[i]);
sort(ticket + 1, ticket + 1 + n);
res = (long long)ticket[1] * n;
left = right = 1;
deque[1] = 1;
for(i = 2; i <= n; ++ i) {
while(left < right && calcBusiness(deque[left], deque[left + 1]) <= i)
++ left;
res = max(res, calc(deque[left], i));
if(ticket[i] == ticket[deque[right]])
continue;
while(left < right && calcBusiness(deque[right], i) < calcBusiness(deque[right - 1], i))
-- right;
deque[++ right] = i;
}
printf("%lld\n", res);
return 0;
}