Cod sursa(job #1455656)

Utilizator preda.andreiPreda Andrei preda.andrei Data 28 iunie 2015 19:11:28
Problema Secv Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <iostream>
#include <stdio.h>

using namespace std;

int v[5001];
int el[5001];
int pr[5001];

int main()
{
    FILE *fin=fopen("secv.in", "r");
    FILE *fout=fopen("secv.out", "w");

    int n, x, p, k=0, mi=2000000000, ap=0, g;
    fscanf(fin, "%d", &n);
    for(int i=1; i<=n; i++){
        fscanf(fin, "%d", &v[i]);
        if(v[i]<mi){
            mi=v[i];
            ap=1;
            pr[ap]=i;
        }
        else if(v[i]==mi)
            pr[++ap]=i;

        if(v[i]>el[k])
            el[++k]=v[i];
        else{
            p=1;
            while(el[p]<v[i])
                p++;
            if(el[p]!=v[i]){
                k++;
                for(int j=k; j>p; j--)
                    el[j]=el[j-1];
                el[p]=v[i];
            }
        }
    }

    if(k==n){
        x=1;
        for(int i=1; i<n; i++)
            if(v[i]>v[i+1])
                x=0;
        if(x==1)
            fprintf(fout, "%d", n);
        else fprintf(fout, "-1");
    }
    else if(k==1){
        fprintf(fout, "1");
    }
    else{
        g=0;
        while(g==0 && ap>0){
            if(n-pr[ap]+1>=k){
                mi=1;
                x=pr[ap];
                while(mi<=k && x<=n){
                    if(v[x]==el[mi])
                        mi++;
                    x++;
                }
                if(mi>k)
                    g=n-pr[ap]+1;
            }
            ap--;
        }
        if(g!=0)
            fprintf(fout, "%d", g);
        else fprintf(fout, "-1");
    }
    return 0;
}