Cod sursa(job #1193309)

Utilizator lacraruraduRadu Matei Lacraru lacraruradu Data 31 mai 2014 14:06:18
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>

using namespace std;

ifstream in("scmax.in");
ofstream out("scmax.out");

const int nmax = 100001;
int v[nmax] , mic[nmax] , pred[nmax] , m;

int caut(int val)
{
    int i , pas;

    i = 0;
    pas = 1 << 16;

    while(pas)
    {
        if(i + pas <= m && v[mic[i + pas]] < val)
            i += pas;

        pas /= 2;
    }

    return i;
}

void afisare(int i)
{
    if(pred[i])
        afisare(pred[i]);

    out << v[i] <<' ';
}

int main()
{
    int n , i , k , maxim , imax;

    in >> n >> v[1];

    maxim = 0;
    mic[++m] = 1;
    for(i = 2 ; i <= n ; i++)
    {
        in>>v[i];

        k = caut(v[i]);
        mic[k + 1] = i;
        pred[i] = mic[k];
        if(k == m) m++;

        if(maxim < k + 1)
        {
            maxim = k + 1;
            imax = i;
        }
    }

    out << maxim << '\n';

    afisare(imax);

    out << '\n';
    return 0;
}