Cod sursa(job #2080406)

Utilizator BazagazealOancea Eduard Bazagazeal Data 2 decembrie 2017 22:09:26
Problema Subsir crescator maximal Scor 35
Compilator c Status done
Runda Arhiva educationala Marime 1.37 kb
#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;
}