Pagini recente » Cod sursa (job #535961) | Cod sursa (job #185363) | Cod sursa (job #229394) | Cod sursa (job #1524214) | Cod sursa (job #2564719)
#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
ifstream in("avioane.in");
ofstream out("avioane.out");
int a[100002];
deque<pair<int,int>> dq;
int main()
{
long long n,i,s=0,r,p,q;
in>>n;
for(i=1;i<=n;i++)
in>>a[i];
sort(a,a+n+1);
for(i=1;i<n;i++)
{
while(dq.size()>1)
{
auto z=dq.back();
if(1LL*a[z.x]*(z.y-z.x+1LL)>1LL*a[i]*(z.y-i+1LL))
break;
dq.pop_back();
}
if(!dq.empty())
for(q=dq.back().x,r=0,p=1<<17;p;p/=2)
if(r+p<n&&1LL*a[q]*(r+p-q+1LL)>1LL*a[i]*(r+p-i+1LL))
r+=p;
dq.push_back({i,r+1});
if(dq.size()>1&&dq[1].y==i)
dq.pop_front();
s=max(s,(n-i)*a[i+1]+(i-dq[0].x+1LL)*a[dq[0].x]);
}
out<<s;
return 0;
}