Cod sursa(job #1160232)

Utilizator assa98Andrei Stanciu assa98 Data 30 martie 2014 13:10:10
Problema Avioane Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
#include <algorithm>
using namespace std;

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

const int MAX_N=100100;

long long v[MAX_N];
int d[MAX_N];
int st,dr;

long long cost(int i,int j) {
    if(v[i]==v[j]) {
        return MAX_N;
    }
    return (v[j]*j-v[i]*i)/(v[j]-v[i]) + 1;
}

int main() {
    int n;
    
    fin>>n;
    for(int i=1;i<=n;i++) {
        fin>>v[i];
    }
    
    sort(v+1,v+n+1);
    
    long long ans=v[1]*n;
    
    d[++dr]=1;
    st=1;
    for(int t=2;t<=n;t++) {
        while(st<dr && cost(d[st],d[st+1])<=t) {
            st++;
        }

        ans=max(ans,(n-t+1)*v[t]+(t-d[st])*v[d[st]]);
        
        if(v[t]==v[d[dr]]) {
            continue;
        }
        
        while(st<dr && cost(d[dr-1],t)>cost(d[dr],t) ) {
            dr--;
        }
        
        d[++dr]=t;
    }
    
    fout<<ans;

    return 0;
}