Pagini recente » Cod sursa (job #1403519) | Cod sursa (job #2366398) | Cod sursa (job #545600) | Cod sursa (job #1677996) | Cod sursa (job #2982101)
#include <fstream>
using namespace std;
ifstream cin( "scmax.in" );
ofstream cout( "scmax.out" );
int best[ 100005 ];
int rez[ 100005 ];
int f[ 100005 ];
int v[ 100005 ];
int k, n;
int cb( int nr ) {
int st = 1, dr = k;
int mij, poz = 0;
while( st <= dr ) {
mij = ( st + dr ) / 2;
if( v[ best[ mij ] ] < nr ) {
poz = mij;
st = mij + 1;
} else dr = mij - 1;
}
return poz;
}
int main()
{
cin >> n;
for( int i = 1; i <= n; i++ ) {
cin >> v[ i ];
int poz = cb( v[ i ] );
best[ poz + 1 ] = i;
if( poz == k )
k++;
f[ i ] = best[ poz ];
}
cout << k << '\n';
int pozc = best[ k ], d = 0;
while( pozc != 0 ) {
rez[ ++d ] = v[ pozc ];
pozc = f[ pozc ];
}
for( int i = d; i >= 1; i-- )
cout << rez[ i ] << ' ';
cout << '\n';
return 0;
}