Cod sursa(job #1624595)

Utilizator delta_wolfAndrei Stoica delta_wolf Data 2 martie 2016 12:21:05
Problema Perle Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <cstdio>
#include<algorithm>
using namespace std;
long long k,mx=0,i,j,n,v[200001],s[200001],d[200001];
int main()
{
    freopen("strabunica.in","r",stdin);
    freopen("strabunica.out","w",stdout);
    scanf("%lld",&n);
    for(i=1;i<=n;i++)
        scanf("%lld",&v[i]);
    for(i=2;i<=n;i++)
        if(v[i]>v[i-1])s[i]=i-1;
        else if(v[i]==v[i-1])s[i]=s[i-1];
        else
        {
            k=s[i-1];
            while(v[k]>=v[i]&&k>0)
                k=s[k];
            s[i]=k;
        }
    d[n]=n+1;
    for(i=n-1;i>=1;i--)
        if(v[i]>v[i+1])d[i]=i+1;
        else if(v[i]==v[i+1])d[i]=d[i+1];
        else
        {
            k=s[i+1];
            while(v[k]>=v[i]&&k<n+1)
                k=d[k];
            if(k==0)k=n+1;
            d[i]=k;
        }
    /*for(i=2;i<=n;i++)
    if(v[i]>v[i-1])s[i]=i-1;

    else if(v[i]==v[i-1])
        s[i]=s[i-1];

    else if(v[i]>s[i-1])
        s[i]=s[i-1];

    else if(v[i]==s[i-1])
        s[i]=s[s[i-1]];

    else if(v[i]<s[i-1])
    {
        k=s[i-1];
        while(v[i]<=v[k])
            k=s[k];
        s[i]=k;
    }
    d[n]=n+1;
    for(i=n-1;i>=1;i--)
    {
        if(v[i]>v[i+1])d[i]=i+1;

    else if(v[i]==v[i+1])
        d[i]=d[i+1];

    else if(v[i]>d[i+1])
        d[i]=d[i+1];

    else if(v[i]==d[i+1])
        d[i]=d[d[i+1]];

    else if(v[i]<d[i+1])
    {
        k=d[i+1];
        while(v[i]<=v[k]&&k<n+1)
            k=d[k];
        d[i]=k;
    }
    }*/
    for(i=1;i<=n;i++)
        if((abs(s[i]-d[i])-2)*v[i]>mx)mx=(abs(s[i]-d[i])-2)*v[i];
    printf("%lld\n",mx);
    return 0;
}