Pagini recente » Cod sursa (job #1368447) | Cod sursa (job #1958216) | Cod sursa (job #874652) | Cod sursa (job #1355970) | Cod sursa (job #823386)
Cod sursa(job #823386)
#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;
}