Cod sursa(job #1135929)

Utilizator andreiiiiPopa Andrei andreiiii Data 8 martie 2014 16:22:01
Problema Avioane Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <algorithm>
#include <fstream>

using namespace std;

const int N=100005;

ifstream fin("avioane.in");
ofstream fout("avioane.out");

int a[N], dq[N], t[N];

int main()
{
    int n, i, st, dr, x;
    long long sol;
    fin>>n;
    for(i=1;i<=n;i++) fin>>a[i];
    sort(a+1, a+n+1);
    dq[1]=st=dr=1;
    sol=1LL*a[1]*n;
    for(i=2;i<=n;i++)
    {
        if(st<dr&&t[dq[st+1]]==i) st++;
        while(st<=dr)
        {
            if(a[i]==a[dq[dr]]) x=N;
            else x=min(1LL*N, 1LL*a[dq[dr]]*(i-dq[dr])/(a[i]-a[dq[dr]]+i));
            if(x<=t[dq[dr]]) dr--;
            else break;
        }
        dq[++dr]=i;
        t[i]=x;
        sol=max(sol, 1LL*a[dq[st]]*(i-dq[st]+1)+1LL*a[i+1]*(n-i));
    }
    fout<<sol<<"\n";
    fin.close();
    fout.close();
}