Pagini recente » Cod sursa (job #2717962) | Cod sursa (job #3172499) | Cod sursa (job #541602) | Cod sursa (job #1822867) | Cod sursa (job #1226673)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream in("avioane.in");
ofstream out("avioane.out");
const int nmax = 100006;
long long v[nmax], rasp, vsol[nmax], vps[nmax];
int n;
void bs(int l, int r){
int m = (l+r)>>1;
vsol[m] = -1;
for(int i = vps[l-1]; i<=vps[r+1]; i++)
{
if(i>m)
break;
if(1LL * (m-i+1) * v[i] > vsol[m] || vsol[m] < 0)
{
vsol[m] = 1LL * (m - i + 1) * v[i];
vps[m] = i;
}
}
if(l<=m-1)
bs(l, m - 1);
if(m+1<=r)
bs(m + 1, r);
}
int main(){
int player_unu=0;
in>>n;
for(int i = 1; i<=n; i++)
in>>v[i];
sort(v + 1, v + n + 1);
vps[n + 1] = n;
bs(1, n);
for(int i = 1; i<=n; i++)
{
if(vsol[i - 1] + v[i] * (n - i + 1)>rasp)
rasp = vsol[i - 1] + v[i] * (n - i + 1);
}
out<<rasp<<'\n';
return player_unu;
}