Cod sursa(job #1274082)

Utilizator ZeBuGgErCasapu Andreas ZeBuGgEr Data 23 noiembrie 2014 11:56:05
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 1.79 kb
#include <stdio.h>
int main()
{
    FILE *fin,*fout;
    fin=fopen("scmax.in","r");
    fout=fopen("scmax.out","w");
    long int n,l,m,r;
    bool flag;
    fscanf(fin,"%ld",&n);
    long int a[n],b[n+1],count=0;
    for(int i=0;i<n;i++)
            fscanf(fin,"%ld",&a[i]);
    
    for(int i=0;i<=n;i++)
    {
            b[i]=2000000000;
    }
    
    for(int i=0;i<n;i++)
    {
            l=0; 
            r=n;
            m=r/2;
            flag=0;
            while(r-l>1)
            {
                        if(b[m]>a[i])
                        {
                                     r=m;
                                     m=(l+r)/2;
                        }
                        else if(b[m]<a[i])
                        {
                            l=m;
                            m=(l+r)/2;
                        }
                        else
                        {
                            flag=1;
                            break;
                        }
            }
            if(flag==0)
            {
                       b[r]=a[i];
            }
    }
    for(int i=0;i<=n;i++)
    {
            if(b[i]!=2000000000)
            {
                                count++;
            }
    }
    fprintf(fout,"%ld\n",count);
    for(int i=0;i<=n;i++)
    {
            if(b[i]!=2000000000)
            {
                                fprintf(fout,"%ld",b[i]);
                                if(i!=n)
                                {
                                          fprintf(fout," ");
                                }
                                else
                                {
                                    fprintf(fout,"\n");
                                }
            }
    }
}