Pagini recente » Cod sursa (job #2812321) | Cod sursa (job #294334) | Cod sursa (job #144202) | Cod sursa (job #2622804) | Cod sursa (job #1976808)
#include <bits/stdc++.h>
#define inf 1e12
using namespace std;
int n,i,ma,mi,j;
long long ans;
double inter[100010];
pair<int,int>v[100010];
vector<int>s;
double intersectie(pair<int,int> a,pair<int,int> b)
{
if(a.first==b.first)return inf;
return 1.0*(b.second-a.second)/(a.first-b.first);
}
int main()
{
ifstream f ("avioane.in");
ofstream g ("avioane.out");
f>>n;
for(i=1; i<=n; ++i)
f>>v[i].first;
sort(v+1,v+n+1);
for(i=1; i<=n; ++i)
v[i].second=-v[i].first*i;
inter[0]=-inf;
for(i=1; i<=n; ++i)
{
while(!s.empty()&&inter[s.size()-1]>=intersectie(v[i],v[s.back()]))s.pop_back();
if(!s.empty())inter[s.size()]=intersectie(v[i],v[s.back()]);
s.push_back(i);
}
for(i=1; i<=n; ++i)
{
while(j<s.size()-1&&inter[j+1]<=i)++j;
ma=v[i].first;
mi=v[s[j]].first;
ans=max(ans,1LL*mi*i+1LL*ma*(n-i+1)+1LL*v[s[j]].second);
}
g<<ans;
return 0;
}