Pagini recente » Cod sursa (job #2201629) | Solutia problemei shoturi | Cod sursa (job #1054145) | Cod sursa (job #1571814) | Cod sursa (job #586479)
Cod sursa(job #586479)
#include <fstream>
#include <algorithm>
#include <iostream>
using namespace std;
int a[100001], n;
long long tsearch(int pos, int left, int right){
//cout << left << " " << right << endl;
if(left == right){
return (left - pos + 1) * a[left];
} else if(left + 1 == right){
int x = (left - pos + 1) * a[left];
int y = (right - pos + 1) * a[right];
return x < y ? y : x;
}
else if(left + 2 == right){
int x = (left - pos + 1) * a[left];
int y = (right - pos + 1) * a[right];
int z = (left + 1 - pos + 1) * a[left + 1];
int m1 = x < y ? y : x;
return z < m1 ? m1 : z;
}
int u = (2*left + right) / 3;
int v = (left + 2*right) / 3;
if((u-pos+1) * a[u] < (v-pos+1) * a[v])
return tsearch(pos, u, right);
else
return tsearch(pos, left, v);
}
// Return whether first element is greater than the second
bool UDgreater ( int elem1, int elem2 )
{
return elem1 > elem2;
}
int main(){
int i;
long long pm = 0, p2;
ifstream f("avioane.in");
ofstream g("avioane.out");
f >> n;
for(i = 0; i < n; i++)
f >> a[i];
sort(a, a + n, UDgreater);
for(i = 0; i < n-1; i++){
//cout <<
p2 = tsearch(i+1, i + 1, n-1);
if((i+1) * a[i] + p2 > pm)
pm = (i+1) * a[i] + p2;
}
g << pm << "\n";
return 0;
}