Cod sursa(job #1722857)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 29 iunie 2016 09:36:07
Problema Secv Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <cstdio>
#define INF 2000000000
#include <algorithm>

using namespace std;
int v[5001],w[5001],p[5001];
int main()
{
    FILE *fin=fopen ("secv.in","r");
    FILE *fout=fopen ("secv.out","w");
    int n,i,maxi,lsecv,j,mini,dist,poz;
    fscanf (fin,"%d",&n);
    for (i=1;i<=n;i++){
        fscanf (fin,"%d",&v[i]);
        w[i]=v[i];
    }
    sort (w+1,w+n+1);
    dist=0;
    for (i=1;i<=n;i++)
        if (w[i]!=w[i-1])
            dist++;
    for (i=1;i<=n;i++){
        maxi=0;
        lsecv=0;
        poz=0;
        for (j=i-1;j>0;j--){
            if (v[j]>maxi && v[j]<v[i]){
                maxi=v[j];
                poz=j;
                lsecv=w[j]+i-j;
            }
        }
        if (lsecv==0)
            w[i]=1;
        else
            w[i]=lsecv;
        p[i]=1+p[poz];
    }
    maxi=0;
    mini=INF;
    poz=0;
    for (i=1;i<=n;i++){
        if (v[i]>maxi && p[i]==dist){
            maxi=v[i];
            mini=w[i];
            poz=i;
        }
        else if (v[i]==maxi && w[i]<mini && p[i]==dist){
            mini=w[i];
            poz=i;
        }
    }
    if (poz!=0)
        fprintf (fout,"%d",mini);
    else fprintf (fout,"-1");
    return 0;
}