Cod sursa(job #1169652)

Utilizator buzu.tudor67Tudor Buzu buzu.tudor67 Data 11 aprilie 2014 20:10:05
Problema Avioane Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<fstream>
#include<algorithm>
#define maxn 100005
using namespace std;
ifstream fi("avioane.in");
ofstream fo("avioane.out");

int i,n,a[maxn],c[maxn];
long long b[maxn],sol=0;

void calcul(int st,int dr){
     long long aux; 
     int i,mid;
    
     if(st<=dr){
                mid=(st+dr)/2;
                for(i=c[st-1]; i<=mid && i<=c[dr+1]; i++)
                   {
                    aux=1LL*(mid-i+1)*a[i];   
                    if(b[mid]<aux){
                                   b[mid]=aux;
                                   c[mid]=i;
                                  }         
                   }
                calcul(st,mid-1);
                calcul(mid+1,dr);
               }
}

int main(){
    fi>>n;
    for(i=1;i<=n;i++) fi>>a[i];
    sort(a+1,a+n+1);
       
    c[n+1]=n;
    calcul(1,n);

    for(i=2;i<=n;i++)
      sol=max(sol,b[i-1]+1LL*(n-i+1)*a[i]);
    
    fo<<sol;
    
    fi.close();
    fo.close();
    return 0;
}