Cod sursa(job #823386)

Utilizator Wanda92Nenu Anda Roxana Wanda92 Data 24 noiembrie 2012 22:36:50
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>

int *a;
int *lungime;
int *b;
int *secventa;

int main(int argc, char *argv[]){

	FILE *f;
	//if ((f=fopen(argv[1],"r"))==NULL){
	//	fprintf(stderr,"Eroare deschidere fisier sursa!");
	//	exit(1);
	//}

	f=fopen("scmax.in","r");

	int n; fscanf(f,"%d",&n);
	a=(int *) calloc(n,sizeof(int));
	for (int i=0;i<n;i++) fscanf(f,"%d",&a[i]);
	fclose(f);

	lungime=(int *) calloc(n,sizeof(int));
	b=(int *) calloc(n,sizeof(int));
	for (int i=0;i<n;i++) b[i]=-1;
	lungime[0]=1;

	for (int i=1;i<n;i++) {
		int max=-1;
		for (int j=0;j<i;j++)
			if (lungime[j]>max && a[i]>a[j]) {
				max=lungime[j];
				b[i]=j;
			}
		if (max==-1) lungime[i]=1;
		else lungime[i]=1+max;
	}

	//for (int i=0;i<n;i++) printf("%d ",lungime[i]);
	//for (int i=0;i<n;i++) printf("%d ",b[i]);
	
	int max=0; int c=0;
	for (int i=0;i<n;i++) if (lungime[i]>max) { max=lungime[i]; c=i; }
	
	secventa=(int *) calloc(n,sizeof(int));
	int m=max;
	int i=0;
	while (c!=-1) {
		secventa[i]=a[c]; 
		c=b[c];
		i++;
	}

	for (int i=0;i<m/2;i++){
		c=secventa[i];
		secventa[i]=secventa[m-i-1];
		secventa[m-i-1]=c;
	}

	FILE *g;
	g=fopen("scmax.out","w");
	fprintf(g,"%d\n",m);
	for (int i=0;i<m;i++) fprintf(g,"%d ",secventa[i]);
	fclose(g);

	free(a);

	return 0;
}