Cod sursa(job #1429367)

Utilizator rocandu16Badulescu Dan Andrei rocandu16 Data 6 mai 2015 10:36:17
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <cstdio>
#define MAX 100001
using namespace std;
int mic[MAX],v[MAX],pred[MAX],sol[MAX];
int n,nr,bot=1;
FILE *fin,*fout;
int cb(int x)
{
    int i=0,pas=1<<16;
    while(pas > 0)
    {
        if(i + pas <=nr)
            if(v[mic[i+pas]]<x)
                i+=pas;
        pas>>=1;

    }
    return i;
}
void sub(int i)
{
    if(pred[i]!=0)
        sub(pred[i]);
    fprintf(fout, "%d ", v[i]);
}
int main()
{
    fin=fopen("scmax.in","r");
    fout=fopen("scmax.out","w");
    fscanf(fin,"%d",&n);
    int j,i;
    for(i=1; i<=n; i++)
    {
        fscanf(fin,"%d",&v[i]);
    }
    nr=0;
    mic[++nr]=1;
    for(i=2; i<=n; i++)
    {
        j=cb(v[i]);
        pred[i]=mic[j];
        mic[j+1]=i;
        if(j==nr) nr++;
    }
    fprintf(fout,"%d\n",nr);
    sub(mic[nr]);
    /*
    for(i=1; i<=bot; i++)
        fprintf(fout,"%d ",sol[i]);
    */
    return 0;
}