Cod sursa(job #1872797)

Utilizator Bodo171Bogdan Pop Bodo171 Data 8 februarie 2017 16:39:30
Problema Avioane Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
const int nmax=100005;
struct segm
{
   long long a,b;
}v[nmax],st[nmax];
int val[nmax];
int i,n,u,p;
long long j,mx;
bool del(segm unu,segm doi,segm trei)
{
    return 1LL*(doi.b-unu.b)*(unu.a-trei.a)>1LL*(unu.a-doi.a)*(trei.b-unu.b);
}
int main()
{
    ifstream f("avioane.in");
    ofstream g("avioane.out");
    f>>n;
    for(i=1;i<=n;i++)
        f>>val[i];
    sort(val+1,val+n+1);
    for(i=1;i<=n;i++)
    {
       v[i].b=1LL*(n-i+1)*val[i];
       v[i].a=-val[i];
    }
    for(i=n;i>=1;i--)
    {
        while(u>=2&&del(st[u-1],st[u],v[i]))
            u--;
        u++;st[u]=v[i];
    }
    p=1;
    for(i=n;i>=1;i--)
    {
        j=n-i+1;
        while(p<u&&(st[p+1].b-st[p].b)>(st[p].a-st[p+1].a)*j)
            p++;
         if(v[i].b+st[p].a*j+st[p].b>mx)
            mx=1LL*(v[i].b+st[p].a*j+st[p].b);
    }
    g<<mx;
    return 0;
}