Cod sursa(job #1520819)

Utilizator Alexa2001Alexa Tudose Alexa2001 Data 9 noiembrie 2015 15:48:17
Problema Avioane Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <cstdio>
#include <algorithm>

using namespace std;

int n,i,start[100009],a[100009];
long long ans=0LL,b[100009];

inline void Search(int left,int right)
{
    if(left>right) return;

    int mij=(left+right)>>1;
    int i;
    for( i=start[left-1]; i<=mij && i<=start[right+1] ;++i)
    if(1LL* (mij-i)*a[i] +1LL*(n-mij+1)* a[mij] > b[mij])
    b[mij]=1LL*(mij-i)*a[i]+1LL*(n-mij+1)*a[mij],
    start[mij]=i;

    if(ans<b[mij]) ans=b[mij];

    Search(left, mij-1);
    Search(mij+1, right);
}

int main()
{
    freopen("avioane.in","r",stdin);
    freopen("avioane.out","w",stdout);

    scanf("%d",&n);
    for(i=1;i<=n;++i) scanf("%d",&a[i]);

    sort(a+1,a+n+1);start[0]=1;start[n+1]=n;
    Search(1,n);

    printf("%lld\n",ans);
    return 0;
}