Cod sursa(job #649191)

Utilizator StefanLacheStefan Lache StefanLache Data 15 decembrie 2011 16:35:34
Problema Subsir crescator maximal Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.48 kb

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int **mat,ulti,n,aux,i,j,lmax=0,lc,ult,ilmax=0;
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    scanf("%i",&n);
    mat=(int **)malloc(n*sizeof(int *));
    for(i=0;i<n;i++)
    {
        mat[i]=(int *)malloc(2*sizeof(int));
        mat[i][0]=i+1;
        scanf("%i",&mat[i][1]);
    }
    for(i=0;i<n-1;i++)
        for(j=i+1;j<n;j++)
        {
            if(mat[i][1]>mat[j][1])
            {
                aux=mat[i][0];
                mat[i][0]=mat[j][0];
                mat[j][0]=aux;
                aux=mat[i][1];
                mat[i][1]=mat[j][1];
                mat[j][1]=aux;
            }
        }
    for(i=0;i<n-1;i++)
    {
        lc=1;
        ult=mat[i][1];
        ulti=mat[i][0];
        for(j=i+1;j<n;j++)
            if(mat[j][0]>ulti)
                if(mat[j][1]!=ult)
                {
                    ult=mat[j][1];
                    ulti=mat[j][0];
                    lc++;
                }
        if(lc>lmax)
            {
                lmax=lc;
                ilmax=i;
            }
    }
    printf("%i\n",lmax);
    printf("%i ",mat[ilmax][1]);
    ult=mat[ilmax][1];
    ulti=ilmax;
    for(i=ilmax+1;i<n;i++)
        if(mat[i][0]>ulti)
            if(mat[i][1]!=ult)
            {
                ult=mat[i][1];
                ulti=mat[i][0];
                printf("%i ",mat[i][1]);
            }
    return 0;

}