Cod sursa(job #2013994)

Utilizator sfechisalin@yahoo.comSfechis Alin [email protected] Data 22 august 2017 18:06:28
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>

#define NN 100005
using namespace std;

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

int N, best, start, lengthM, End, M[NN];
vector<int> father, a;


void ReadData()
{
     fin >> N;
    a.resize(N + 1); father.resize(N + 1, 0);
    for (int i = 1; i <= N; ++i)
        fin >> a[i];
}

void Solve()
{
    int Pow, answ;
    for (int i = 1;  i <= N; ++i)
    {
        Pow = 1; answ = 0;
        for (; (Pow << 1) <= lengthM; Pow <<= 1);

        for (int step = Pow; step; step >>= 1)
            if (answ + step <= lengthM && a[M[answ + step]] < a[i])
                answ += step;

        father[i] = M[answ];


        if (answ == lengthM)
            M[++lengthM] = i, End = i;
        else
            M[answ + 1] = i;
    }
}

void writeSol(int nod)
{
    if (father[nod])
        writeSol(father[nod]);
    fout << a[nod] << " ";
}

int main()
{
    ReadData();
    Solve();
    fout << lengthM << "\n";
    writeSol(End);

    return 0;
}