Cod sursa(job #2291340)

Utilizator viftode4Iftode Vlad viftode4 Data 27 noiembrie 2018 21:50:27
Problema Subsir crescator maximal Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin( "scmax.in" );
ofstream fout( "scmax.out" );
int n, a[100005], r[100005], sol[100005], sm, k = 1;
int main()
{
    fin >> n;

    for( int i = 1; i <= n; i++ )
        {
            fin >> a[i];
            r[i] = INT_MAX;
        }

    r[1] = a[1];
    sol[1] = a[1];
    int v = 1;
    //fout << "REZ:" << 1 << ' ' << r[1] << endl;

    for( int i = 2; i <= n; i++ )
        {
            int s = 1, d = v + 1;

            while( s < d )
                {
                    int m = ( s + d ) / 2;

                    if( a[i] > r[m] )
                        s = m + 1;
                    else
                        d = m - 1;
                }

            if( s == v + 1 )
                {
                    v++;
                    sol[v] = a[i];
                }
            else if( s == 1 && k )
                {
                    sol[1] = a[i];
                    k = 0;
                }

            sm = max( s, sm );
            r[s] = a[i];
            /*  fout << "REZ:";

              for( int i = 1; i <= v; i++ )
                  fout << i << ' ' << r[i] << '\n';

              fout << "Nr: " << a[i] << endl;*/
        }

    fout << sm << endl;

    for( int i = 1; i <= sm; i++ )
        fout << sol[i] << ' ';


    return 0;
}