Cod sursa(job #2515373)

Utilizator alex2209alexPavel Alexandru alex2209alex Data 28 decembrie 2019 14:19:00
Problema Avioane Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("avioane.in");
ofstream g("avioane.out");
//-----------------------------------------
///Globale
int n,v[100001];
//-----------------------------------------
///Functii
void citire();
void rezolvare();
//-----------------------------------------
int main()
{
    citire();
    rezolvare();
    return 0;
}
//-----------------------------------------
void rezolvare()
{
    sort(v + 1,v + n + 1);
    if(n == 1)
    {
        g << v[1];
        return;
    }
    int raspuns = v[1] * n;
    deque<pair<int,int>>dq;
    dq.push_front({v[1],1});
    for(int i = 2; i <= n; ++i)
    {
        pair<int,int>x = dq.front();
        raspuns = max(raspuns,(n - i + 1) * v[i] + (i - x.second) * x.first);
        dq.pop_front();
        while(!dq.empty())
        {
            pair<int,int>y = dq.front();
            if((i + 1 - y.second) * y.first > (i + 1 - x.second) * x.first)
            {
                x = y;
                dq.pop_front();
            }
            else
                break;
        }
        dq.push_front(x);
        x = {v[i],i};
        while(!dq.empty())
        {
            pair<int,int>y = dq.back();
            if((i + 1 - y.second) * y.first < (i + 1 - x.second) * x.first)
                dq.pop_back();
            else
                break;
        }
        dq.push_back(x);
    }
    g << raspuns << '\n';
}
//-----------------------------------------
void citire()
{
    f >> n;
    for(int i = 1; i <= n; ++i)
        f >> v[i];
}