Pagini recente » Cod sursa (job #2261746) | Cod sursa (job #2038966) | Cod sursa (job #591034) | Cod sursa (job #2057328) | Cod sursa (job #2342964)
#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 ] ) ;
}