Cod sursa(job #2564719)

Utilizator SchnitzelMannPavaloiu Gabriel SchnitzelMann Data 2 martie 2020 09:43:21
Problema Avioane Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.68 kb
#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;
}