Cod sursa(job #1229680)

Utilizator iordache.bogdanIordache Ioan-Bogdan iordache.bogdan Data 17 septembrie 2014 22:05:09
Problema Avioane Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
#include <algorithm>
#define DIM 100005
#define infile "avioane.in"
#define outfile "avioane.out"

using namespace std;

ifstream f(infile);
ofstream g(outfile);

int n;

int V[DIM];

long long D[DIM];

long long solve(int left, int right) {
	if (left > right)
		return 0;
	int mid = ((left + right) >> 1);
	long long Max = 0;
	for (long long i = D[left - 1]; i <= std::min(D[right + 1], 1LL*mid); ++i) {
		long long ans = 1LL * V[mid] * (n - mid + 1) + 1LL * V[i] * (mid - i);
		if (Max < ans) {
			Max = ans;
			D[mid] = i;
		}
	}
	return std::max(Max, std::max(solve(left, mid - 1), solve(mid + 1, right)));
}

int main() {
	f >> n;
	for (int i = 1; i <= n; ++i)
		f >> V[i];
	sort(V + 1, V + n + 1);
	D[n + 1] = n;
	g << solve(1, n);
	return 0;
}

//This room.This bullet.There's a bullet for everyone. And a time. And a place. Yes... maybe this is how it has to be. - 47