Pagini recente » Cod sursa (job #1285112) | Cod sursa (job #2197109) | Cod sursa (job #68563) | Cod sursa (job #321986) | Cod sursa (job #2610866)
#include <bits/stdc++.h>
#define INF 20000000000000LL
#define ll long long int
using namespace std;
ifstream f("avioane.in");
ofstream g("avioane.out");
ll n,v[100005];
ll deq[100005],inc=1,sf=2;
ll bst[100005];
ll sol=0;
ll fct(ll a,ll b) ///calculam la ce pozitie elementul de pe poz b este mai bun decat cel de pe poz a
{
if(v[a]==v[b]) return INF;
ll x=(b*v[b]-a*v[a])/(v[b]-v[a])+1;
return x;
}
int main()
{
f>>n;
for(int i=1;i<=n;i++)
f>>v[i];
sort(v+1,v+n+1);
sf=2;
inc=1;
deq[1]=1;
deq[2]=1;
for(int i=3;i<=n;i++)
{
while(sf-inc>=1&&(fct(deq[inc],deq[inc+1])<i))
inc++;
while(sf-inc>=1&&(fct(deq[sf-1],deq[sf])>fct(deq[sf-1],i)))
sf--;
deq[++sf]=i;
bst[i]=deq[inc];
}
for(int i=1;i<=n;i++)
{
sol=max(sol,v[i]*(n-i+1)+v[bst[i-1]]*(i-bst[i-1]));
}
g<<sol;
}