Pagini recente » Cod sursa (job #3271567) | Cod sursa (job #582208) | Cod sursa (job #1240733) | Profil CarausuMadalina | Cod sursa (job #2080406)
#include <stdio.h>
#include <stdlib.h>
void subsir_crescator_maximal()
{
FILE *f=fopen("scmax.in", "r");
FILE *g=fopen("scmax.out", "w");
int n,i,pos_max=1,j,ok,max;
fscanf(f,"%d", &n);
int *x=(int*)malloc(sizeof(int)*n);
int *d=(int*)malloc(sizeof(int)*n);
int *p=(int*)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
fscanf(f,"%d ", &x[i]);
d[0]=-1;
p[0]=-1;
d[1]=x[0];
max=-1;
for(i=1;i<n;i++)
{
j=1;
ok=0;
while(j<=pos_max && !ok)
{
if(x[i]<d[j])
{
ok=1;
d[j]=x[i];
}
else j++;
}
if(!ok)
{
pos_max++;
d[pos_max]=x[i];
}
max=-1;
for(j=0;j<i;j++)
if(x[j]<x[i] && max<x[j])
max=x[j];
p[i]=max;
}
int *sol=(int*)malloc(sizeof(int)*pos_max);
sol[0]=d[pos_max];
for(i=1;i<pos_max;i++)
{
j=0;
ok=0;
while(j<n && !ok)
if(x[j]==sol[i-1])
{
ok=1;
sol[i]=p[j];
}
else j++;
}
fprintf(g, "%d\n", pos_max);
for(i=pos_max-1;i>=0;i--)
fprintf(g, "%d ", sol[i]);
}
int main()
{
subsir_crescator_maximal();
return 0;
}