Pagini recente » Cod sursa (job #746249) | Cod sursa (job #2750466) | Cod sursa (job #155951) | Cod sursa (job #186212) | Cod sursa (job #2616589)
#include <iostream>
#include <fstream>
using namespace std;
ifstream r( "scmax.in" );
ofstream w( "scmax.out" );
int v[ 200001 ], poz[ 200001 ];
int dinamica[ 200001 ], cnt[ 200001 ];
int cautbin(int x, int dr);
int main()
{
int n = 0, b = 0, lungime = 0, maxim = 0, maxim2;
r >> n;
for( int i = 0; i < n; i++ )
r >> v[ i ];
for(int i = 0; i < n; i++ ){
b = cautbin( v[i], lungime );
lungime = max( lungime, b + 1 );
dinamica[ i ] = b + 1;
poz[ dinamica[ i ] ] = i;
maxim = max( maxim, dinamica[ i ] );
}
maxim2 = maxim;
w << maxim <<"\n";
for(int i = n - 1; i >= 0; i-- ){
if( maxim2 == dinamica[ i ] ) {
cnt[ maxim2 ] = v[ i ];
maxim2--;
}
}
for(int i = 1; i <= maxim; i++ )
w << cnt[ i ] << " ";
return 0;
}
int cautbin(int x, int dr){
int st = 1, p = 0, mij;
while( st <= dr ){
mij = ( st + dr ) / 2;
if( v[ poz [ mij ] ] < x ){
p = mij;
st = mij + 1;
} else dr = mij - 1;
}
return p;
}