Cod sursa(job #1194288)

Utilizator Aleks10FMI - Petrache Alex Aleks10 Data 3 iunie 2014 13:56:29
Problema Stergeri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#define MAX_N 100100
using namespace std;

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

long long val(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;
    
    ifstream f("avioane.in");
    ofstream g("avioane.out");
    
    f>>n;
    for(int i=1;i<=n;i++) {
        f>>v[i];
    }
    
    sort(v+1,v+n+1);
    
    long long r=v[1]*n;
    
    d[++dr]=1;
    st=1;
    for(int i=2;i<=n;i++) {
        while(st<dr && val(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 && val(d[dr-1],i)>val(d[dr],i))
            dr--;
        d[++dr]=i;
    }
    g<<r;
    
    return 0;
}