Cod sursa(job #1190755)

Utilizator buzu.tudor67Tudor Buzu buzu.tudor67 Data 25 mai 2014 17:13:31
Problema Avioane Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Semestrul 2 Marime 1 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;
}