Cod sursa(job #3343545)

Utilizator tudor_costinCostin Tudor tudor_costin Data 27 februarie 2026 18:40:09
Problema Avioane Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <bits/stdc++.h>
#define ld long double
#define int long long
using namespace std;
ifstream fin("avioane.in");
ofstream fout("avioane.out");
const int Nmax=1e5+5,inf=1e18;
struct line
{
    int m,b;
    int eval(int x)
    {
        return m*x+b;
    }
};
ld intercept(line x,line y)
{
    if(x.m==y.m) return inf;
    return 1.0*(y.b-x.b)/(x.m-y.m);
}
int a[Nmax];
signed main()
{
    int n;
    fin>>n;
    for(int i=1;i<=n;i++) fin>>a[i];
    sort(a+1,a+n+1);
    deque<line> dq;
    dq.push_back({a[1],-a[1]});
    int ans=a[1]*n;
    for(int i=2;i<=n;i++)
    {
        while(dq.size()>1 && intercept(dq[0],dq[1])<i) dq.pop_front();
        int value=dq[0].eval(i)+(n-i+1)*a[i];
        ///cout<<i<<' '<<value<<'\n';
        ans=max(ans,value);
        line newline={a[i],-i*a[i]};
        while(dq.size()>1 && intercept(dq.back(),newline)<intercept(dq.back(),dq[dq.size()-2])) dq.pop_back();
        if(dq.back().m<newline.m) dq.push_back(newline);
    }
    fout<<ans<<'\n';
    return 0;
}