Cod sursa(job #1034391)

Utilizator sddddgjdZloteanu Anastasia sddddgjd Data 17 noiembrie 2013 20:02:06
Problema Subsir crescator maximal Scor 20
Compilator c Status done
Runda Arhiva educationala Marime 0.83 kb
#include<stdio.h>
int v[100000];
int cautbin(int st,int dr,int val)
{
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(v[mij]>val)
            dr=mij-1;
        if(v[mij]<val)
            st=mij+1;
        if(v[mij]==val)
            return -1;
    }
    return st;
}
int main()
{
    FILE *fin,*fout;
    fin=fopen("scmax.in","r");
    fout=fopen("scmax.out","w");
    int n;
    fscanf(fin,"%d",&n);
    int i,l=0;
    for(i=0; i<n; i++)
    {
        int x;
        fscanf(fin,"%d",&x);
        if(x>v[l-1])
        {
            v[l]=x;
            l++;
        }
        else
        {
            int pos=cautbin(0,l-1,x);
            if(pos!=-1)
                v[pos]=x;
        }
    }
    fprintf(fout,"%d\n",l);
    for(i=0; i<l; i++)
        fprintf(fout,"%d ",v[i]);
    return 0;
}