Cod sursa(job #2131363)

Utilizator CryshanaGanea Carina Cryshana Data 14 februarie 2018 17:38:12
Problema Subsir crescator maximal Scor 95
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;

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

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

int cautbin ( double x )
{
    int pas = 1 << 30, r = 0;
    while ( pas != 0 )
    {
        if ( r + pas <= m && val[r + pas] < x)
            r += pas;
        pas = pas >> 1;
    }
    return r;
}

void subsir ( int p )
{
    if( pred[p] != 0 )
    {
        subsir ( pred[p] );
    }
    fout << v[p] <<" ";
}

int main()
{
    int n, s = 0, lmax = 0;
    fin >> n;
    for ( int i = 0 ; i < n ; i ++ )
        fin >> v[i];
    int j;
    val[0] = v[0];
    for ( int i = 0 ; i < n ; i ++ )
       {
            j = cautbin ( v[i]);
            if ( j == m )
            {
                m ++;
            }
            val[j+1] = v[i];
            poz[j+1] = i;
            pred[i] = poz[j];
            lung[i] = j + 1;
       }
    fout << m << "\n";
    subsir ( poz[m] );
    return 0;
}