Cod sursa(job #1429368)

Utilizator Vlad_317Vlad Panait Vlad_317 Data 6 mai 2015 10:37:34
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <stdio.h>

using namespace std;

#define MAX 100001

FILE *fin, *fout;

int v[MAX], mic[MAX], pred[MAX], n, nr;
int sol[MAX], top;

int cb(int x)
{
    int i = 0, pas = 1 << 20;
    while(pas > 0)
    {
        if(i + pas <= nr)
            if(v[mic[i + pas]] < x)
                i += pas;
        pas >>= 1;
    }
    return i;
}

void subsir(int i)
{
    if(pred[i]!=0)
        subsir(pred[i]);
    fprintf(fout,"%d ",v[i]);
}

int main()
{

    fin = fopen ("scmax.in", "r");
    fout = fopen ("scmax.out", "w");

    int j;
    fscanf(fin, "%d", &n);


    for(int i = 1; i <= n ; i++)
    {
        fscanf(fin, "%d", &v[i]);
    }

    nr = 0;
    mic[++nr] = 1;

    for(int 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);

    subsir(mic[nr]);

    return 0;
}