Cod sursa(job #22550)

Utilizator hellraizerChiperi Matei hellraizer Data 26 februarie 2007 20:02:43
Problema Secv Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <stdio.h>

#define N_MAX 101

int n,m,a[N_MAX],t[N_MAX],p[N_MAX];
long v[N_MAX],c[N_MAX];

void citire(){
	int bun;
	FILE *fin=fopen("secv.in","r");
	fscanf(fin,"%d",&n);
	for (int i=1;i<=n;i++){
		fscanf(fin,"%ld",&v[i]);
		bun=1;
		for (int j=1;j<=m;j++)
			if (c[j]==v[i])
				bun=0;
		if (bun)
			c[++m]=v[i];
	}
	fclose(fin);
}

void prelucrare(){
	for (int i=n;i>=1;i--){
		a[i]=1;
		t[i]=0;
		p[i]=i;
		for (int j=n;j>i;j--)
			if (v[i]<v[j])
				if (a[j]+1>a[i]){
					a[i]=a[j]+1;
					t[i]=j;
					p[i]=p[j];
				}
				else
					if (a[j]+1==a[i])
						if (v[t[i]]>v[j]){
							t[i]=j;
							p[i]=p[j];
						}
	}
}

void afisare(){
	FILE *fout=fopen("secv.out","w");
	int min=N_MAX;
	for (int i=1;i<=n;i++)
		if (a[i]==m)
			if (min>p[i]-i+1)
				min=p[i]-i+1;
	if (min==N_MAX)
		fprintf(fout,"-1\n");
	else
		fprintf(fout,"%d\n",min);
	fclose(fout);
}

int main(){
	citire();
	prelucrare();
	afisare();
	return 0;
}