Cod sursa(job #1194497)

Utilizator tudormaximTudor Maxim tudormaxim Data 3 iunie 2014 23:09:34
Problema Avioane Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#define maxn 100100
#define ll long long
using namespace std;
ll v[maxn];
int d[maxn], st,dr;
ifstream in("avioane.in");
ofstream out("avioane.out");
ll f(int i,int j)
{
    if(v[i]==v[j])
        return maxn;
    return (v[j]*j-v[i]*i)/(v[j]-v[i]) + 1;
}
int main()
{
    int n;
    in>>n;
    for(int i=1;i<=n;i++)
        in>>v[i];
    sort(v+1,v+n+1);
    ll r=v[1]*n;
    d[++dr]=1;
    st=1;
    for(int i=2;i<=n;i++)
    {
        while(st<dr && f(d[st],d[st+1])<=i)
            st++;
        r=max(r,(n-i+1)*v[i]+(i-d[st])*v[d[st]]);
        if(v[i]==v[d[dr]])
            continue;
        while(st<dr && f(d[dr-1],i)>f(d[dr],i))
            dr--;
        d[++dr]=i;
    }
    out<<r;
    return 0;
}