Cod sursa(job #2131418)

Utilizator Cioarec_GeorgeCioarec George Cioarec_George Data 14 februarie 2018 18:17:36
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int lung[100000], m, pred[100000], poz[100000], val[100000], v[100000];

int cb(int x)
{
    int r=0, pas=1<<16;
    while(pas!=0)
    {
        if(r+pas<=m && val[r+pas]<x)
            r+=pas;
        pas/=2;
    }
    return r;
}

void subsir ( int p )
{
    if(v[pred[p]]<v[p] && p>=0)
        subsir(pred[p]);
    out<<v[p]<<" ";
}

int main()
{

    int n, j;
    in>>n;
    for(int i=0; i<n; i++)
        in>>v[i];
    val[0]=v[0];
    for(int i=0; i<n; i++)
    {
        j=cb(v[i]);
        if (j==m)
            m++;
        val[j+1]=v[i];
        poz[j+1]=i;
        pred[i]=poz[j];
        lung[i]=j+1;
    }
    out<<m<<"\n";
    if(poz[m]!=0)
        subsir(poz[m]);
    else
        out<<"0";
    return 0;
}