Cod sursa(job #2610866)

Utilizator robert.barbu27robert barbu robert.barbu27 Data 5 mai 2020 19:56:23
Problema Avioane Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <bits/stdc++.h>
#define INF 20000000000000LL
#define ll long long int
using namespace std;
ifstream f("avioane.in");
ofstream g("avioane.out");
ll n,v[100005];
ll deq[100005],inc=1,sf=2;
ll bst[100005];
ll sol=0;
ll fct(ll a,ll b) ///calculam  la ce pozitie elementul de pe poz b este mai bun decat cel de pe poz a
{

    if(v[a]==v[b]) return INF;
     ll x=(b*v[b]-a*v[a])/(v[b]-v[a])+1;
    return x;



}
int main()
{
    f>>n;
    for(int i=1;i<=n;i++)
        f>>v[i];
    sort(v+1,v+n+1);
    sf=2;
    inc=1;
    deq[1]=1;
    deq[2]=1;
    for(int i=3;i<=n;i++)
    {

        while(sf-inc>=1&&(fct(deq[inc],deq[inc+1])<i))
            inc++;
       while(sf-inc>=1&&(fct(deq[sf-1],deq[sf])>fct(deq[sf-1],i)))
            sf--;


       deq[++sf]=i;
       bst[i]=deq[inc];


    }

    for(int i=1;i<=n;i++)
    {
        sol=max(sol,v[i]*(n-i+1)+v[bst[i-1]]*(i-bst[i-1]));
    }
    g<<sol;


}