Cod sursa(job #2604656)

Utilizator Dobricean_IoanDobricean Ionut Dobricean_Ioan Data 23 aprilie 2020 09:28:06
Problema Avioane Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <algorithm>
#include <fstream>
#include <cstdio>
using namespace std;
const int  NMAX = 100005;
ifstream fin("avioane.in");
ofstream fout("avioane.out");


long long pos[NMAX] , v[NMAX] , dp[NMAX];
long long ans , n;
	

void solve(long long st , long long dr) {
    if(st > dr) {
        return;
    }
    long long mid = st + (dr - st) / 2;
    for(int i = pos[st - 1] ; i <= pos[dr + 1] && i <= mid ; ++i) {
        long long aux = v[mid] * (n - mid + 1) + v[i] * (mid - i);
        if(aux > dp[mid]) {
            dp[mid] = aux;
            pos[mid] = i;
        }
    }
    solve(st , mid - 1);
    solve(mid + 1 , dr);	
}
	
 
	
int main() {
	
    fin >> n;
    for(int i = 1 ; i <= n ; ++i) {
        fin >> v[i];
    }
    sort(v + 1 , v + n + 1);
    pos[0] = 1 , pos[n + 1] = n;
    solve(1 , n);
    for(int i = 1 ;  i <= n ; ++i) {
        ans = max(ans , dp[i]);
	
    }
   fout << ans;
	
    return 0;
	
}