Cod sursa(job #181882)

Utilizator toni2007Pripoae Teodor Anton toni2007 Data 19 aprilie 2008 09:27:15
Problema Secv Scor 30
Compilator c Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <stdio.h>
#include <stdlib.h>
#define N 5010
int v[N],lung[N],pred[N];
int n,nr;
void scan(){
	int i,j,sw;
	freopen("secv.in","r",stdin);
	freopen("secv.out","w",stdout);
	scanf("%d",&n);
	for (i=1;i<=n;++i){
		scanf("%d",&v[i]);
		sw=1;
		for (j=1;j<i && sw==1;++j)
			if(v[j]==v[i])
				sw=0;
		if (sw==1)
			++nr;
	}
}
void subsir(){
     int i,j;
     lung[1]=1;pred[1]=-1;
     for (i=2;i<=n;++i){
         pred[i]=-1;lung[i]=1;
         for (j=1;j<i;++j)
             if (v[j]<v[i] && lung[j]>=lung[i]-1){
                lung[i]=lung[j]+1;
                pred[i]=j;
             }
     }
}
int predecesor(int x){
    if (pred[x]!=-1)
       return predecesor(pred[x]);
    else
        return x;
}
void print(){
	int max=0,i,x;
	for (i=1;i<=n;++i)     
		if (lung[i]>=max){
            max=lung[i];
            x=i;
		}
	if (max!=nr){
		printf("-1\n");
		exit(0);
	}
	printf("%d\n",x-predecesor(x)+1);
	fclose(stdin);
    fclose(stdout);
    exit(0);
}
int main(){
    scan();
    subsir();
    print();
}