Cod sursa(job #2572539)

Utilizator Anakin1001George Giorgiu Gica Anakin1001 Data 5 martie 2020 13:14:53
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>

#define N 100001

using namespace std;

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

int a[N], v[N], k, n, i, len[N], tata[N], Max, x, l, sol[N];

int cautbin ( int x ){
    int st = 1, dr = k, sol = k + 1;
    while ( st <= dr ){
        int mid = ( st + dr ) / 2;
        if ( v[a[mid]] >= x ){
            sol = mid;
            dr = mid - 1;
        }
        else
            st = mid + 1;
    }
    return sol;
}

int main()
{   f >> n;
    for ( i = 1; i <= n; i++ ){
        f >> v[i];
        int poz = cautbin ( v[i] );
        k = max ( k, poz );
        a[poz] = i;
        len[i] = poz;
        tata[i] = a[poz - 1];
    }
    for ( i = 1; i <= n; i++ )
        if ( Max < len[i] ){
            Max = len[i];
            x = i;
        }
    g << Max << '\n';
    while ( x != 0 ){
        sol[++l] = v[x];
        x = tata[x];
    }
    for ( i = l; i >= 1; i-- )
        g << sol[i] << ' ';
    return 0;
}