Pagini recente » Cod sursa (job #1579840) | Cod sursa (job #2662692) | Cod sursa (job #810823) | Cod sursa (job #736355) | Cod sursa (job #586303)
Cod sursa(job #586303)
#include <cstdio>
#include <algorithm>
using namespace std;
#define Nmax 100001
int N, S[Nmax], i, ph, pl, p, hi, lo, i1, i2;
int Q[Nmax], st, dr;
int main()
{
freopen("avioane.in","r",stdin);
freopen("avioane.out","w",stdout);
scanf("%d", &N);
for (i=0; i<N; ++i)
scanf("%d", &S[i]);
sort(S, S+N);
ph = pl = 0;
hi = lo = 0;
Q[st=0] = 0;
dr = 1;
for (hi=1; hi<N; ++hi)
{
ph = S[hi] * (N-hi);
//scoate din dequeue
if (S[hi] != S[lo])
{
while (st>dr)
{
i1 = S[lo] * (hi-lo) / (S[hi]-S[lo]);
i2 = S[lo] * (Q[st]-lo) / (S[Q[st]]-S[lo]);
if (i2+Q[st] < i1+hi) break;
--st;
}
Q[++st] = hi;
}
if (dr<=st && Q[dr] != hi)
{
i1 = S[lo] * (Q[dr]-lo) / (S[Q[dr]]-S[lo]) + 1;
if (i1+Q[dr]<=hi) lo = Q[dr], ++dr;
}
//printf("%d %d\n",lo,hi);
pl = S[lo] * (hi-lo);
if (pl+ph>p) p = pl+ph;
}
printf("%d\n", p);
return 0;
}