Cod sursa(job #2325383)

Utilizator Mihnea_BranzeuMihnea Branzeu Mihnea_Branzeu Data 22 ianuarie 2019 16:35:08
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <fstream>

using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,m;
int v[100002],aux[100002],pred[100002];
const int L=16;
int cautb(int x)

{

    int r,pas;

    r=0;

    pas=1<<L;

    while(pas!=0)

    {

        if(r+pas<=m && v[aux[r+pas]]<x)

            r+=pas;

        pas/=2;

    }

    return r;

}

void sir(int p)
{
    if(pred[p]!=0)
        sir(pred[p]);
    fout<<v[p]<<" ";
}
int main()
{
    int j;
    fin>>n;
    for(int i=1; i<=n; i++)
        fin>>v[i];
    m=1;
    aux[1]=1;
    for(int i=2; i<=n; i++)
    {
        j=cautb(v[i]);
        if(j==m)
        {
            m++;
        }
        pred[i]=aux[j];
        aux[j+1]=i;
    }
    fout<<m<<"\n";
    sir(aux[m]);
    return 0;
}