Cod sursa(job #1226673)

Utilizator nimicLeoveanu Mihaita Alexandru nimic Data 6 septembrie 2014 18:11:34
Problema Avioane Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream in("avioane.in");
ofstream out("avioane.out");

const int nmax = 100006;
long long v[nmax], rasp, vsol[nmax], vps[nmax];
int n;

void bs(int l, int r){
    int m = (l+r)>>1;
     
    vsol[m] = -1;
     
    for(int i = vps[l-1]; i<=vps[r+1]; i++)
    {
        if(i>m)
			break;
         
        if(1LL * (m-i+1) * v[i] > vsol[m] || vsol[m] < 0)
        {
            vsol[m] = 1LL * (m - i + 1) * v[i];
            vps[m] = i;
        }
    }
     
    if(l<=m-1)
		bs(l, m - 1);

    if(m+1<=r)
		bs(m + 1, r);
}

int main(){
	int player_unu=0;

	in>>n;
	for(int i = 1; i<=n; i++)
		in>>v[i];
	sort(v + 1, v + n + 1);

	vps[n + 1] = n;
	bs(1, n);

	for(int i = 1; i<=n; i++)
	{
		if(vsol[i - 1] + v[i] * (n - i + 1)>rasp)
			rasp = vsol[i - 1] + v[i] * (n - i + 1);
	}

	out<<rasp<<'\n';

	return player_unu;
}