Cod sursa(job #1413422)

Utilizator heracleRadu Muntean heracle Data 1 aprilie 2015 21:03:54
Problema Avioane Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>
#include <algorithm>

FILE* in=fopen("avioane.in","r");
FILE* out=fopen("avioane.out","w");

const int Q=100100;

int v[Q];
int n;

int deq[Q];
int t[Q];

int nr;

long long timp(int a, int b)
{
    long long aux1,aux2;

    aux1=1LL*(b-a)*v[a];
    aux2=1LL*(v[b]-v[a]);

    return b+aux1/aux2;
}

int main()
{
    fscanf(in,"%d",&n);

    for(int i=1; i<=n; i++)
    {
        fscanf(in,"%d",&v[i]);
    }

    std::sort(v+1,v+n+1);

    int act;

    int st,dr;

    st=1;
    dr=1;
    deq[1]=1;
    t[1]=v[1];

    long long rez=0;

    for(int i=2; i<=n; i++)
    {
        if(v[i]==v[i-1])
            continue;

        while(st<dr && t[deq[st+1]]<=i)
            st++;

        t[deq[st]]=i;

        while(dr>st && timp(deq[dr],i) < t[deq[dr]])
        {
            dr--;
        }

        t[i]=timp(deq[dr],i);


        deq[++dr]=i;

        if(rez< 1LL*v[ deq[st] ]*(i-deq[st])+1LL*(n-i+1)*v[i])
            rez=1LL*v[ deq[st] ]*(i-deq[st])+1LL*(n-i+1)*v[i];
    }

    fprintf(out,"%lld\n",rez);


    return 0;
}