Cod sursa(job #1244282)

Utilizator karlaKarla Maria karla Data 17 octombrie 2014 00:39:06
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <stdio.h>
FILE*f=fopen("scmax.in","r"),*g=fopen("scmax.out","w");

long n, v[100003],d[10003],l[10003],nr;

using namespace std;

void citire()
{
    fscanf(f,"%ld",&n);
    for(long i=1;i<=n;i++)
    {
        fscanf(f,"%ld",&v[i]);
    }
    fclose(f);
}

void inserare(long x)
{
    long p=1,u=nr,mij;
    while(p<=u)
    {
        mij=(p+u)/2;
        if(v[x]>v[d[mij]])
            p=mij+1;
        else
            u=mij-1;
    }
    if(v[x]<v[d[p]])
    {
        l[x]=d[p-1];
        d[p]=x;
    }
}

void afisare(long i)
{
    if(i==0) return;
    afisare(l[i]);
    fprintf(g,"%ld ",v[i]);

}

void crescator()
{
    d[1]=1;
    nr=1;
    for(long i=2;i<=n;i++)
    {
        if(v[i]>v[d[nr]])
        {
            nr++;
            d[nr]=i;
            l[i]=d[nr-1];
        }
        else
            inserare(i);
    }
    fprintf(g,"%ld\n",nr);
    afisare(d[nr]);
}

int main()
{
    citire();
    crescator();
    return 0;
}