Cod sursa(job #2342964)

Utilizator Andrei-27Arhire Andrei Andrei-27 Data 13 februarie 2019 16:09:48
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <bits/stdc++.h>
using namespace std ;
const int NR = 100005 , oo = ( 1 << 31 ) - 1 ;
vector < int > m ( NR , oo ) ;
int a [ NR ] , n , jmax , j , r [ NR ] , p [ NR ] ;
ifstream in ("scmax.in") ;
ofstream out ("scmax.out") ;
int dei ( int from , int to , int key )
{
    if ( to - from <= 1 )

    {
        if ( m [ to ] < key )   return to ;
        if ( m [ from ] < key )   return from ;
        return 0 ;
    }

    int mid = ( from + to ) >> 1 ;
    if ( key > m [ mid ] )  return dei ( mid , to , key ) ;
    if ( key < m [ mid ] )  return dei ( from , mid , key ) ;
    if ( key == m [ mid ] ) return dei ( from , mid - 1 , key ) ;

}
void print ( int poz )
{
    if ( !poz ) return ;
    print ( r [ poz ] ) ;
    out << a [ poz ] << ' ' ;
}

int main ()
{
    in >> n ;
    for ( int i = 1 ; i <= n ; ++ i )
    {
            in >> a [ i ] ;
            j = dei ( 0 , jmax , a [ i ] ) ;
            if ( m [ j + 1 ] > a [ i ] )    // merge si fara conditie
            {
                m [ j + 1 ] = a [ i ] ;
                jmax = max ( jmax , j + 1 ) ;
                p [ j + 1 ] = i ;
                r [ i ] = p [ j ] ;
            }
    }
     out <<  jmax << '\n' ;
    print ( p [ jmax ] ) ;
}