Pagini recente » Monitorul de evaluare | Cod sursa (job #1026247) | Cod sursa (job #2201994) | Cod sursa (job #1809976) | Cod sursa (job #1691726)
#include<fstream>
#define DIM 100005
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int v[DIM], w[DIM], n, nr, dr, st, mid, t[DIM];
void drum( int nod ){
if( nod != 0 ){
drum( t[nod] );
fout << v[nod] << " ";
}
return ;
}
int main(){
fin >> n;
for( int i = 1; i <= n; i++ ){
fin >> v[i];
}
nr = 1;
w[1] = 1;
t[1] = 0;
for( int i = 2; i <= n; i++ ){
if( v[ w[nr] ] < v[i] ){
nr++;
w[nr] = i;
t[i] = w[nr - 1];
}else{
st = 1;
dr = nr;
while( st <= dr ){
mid = ( st + dr ) / 2;
if( v[ w[mid] ] < v[i] ){
st = mid + 1;
}else{
dr = mid - 1;
}
}
if( v[ w[dr] ] < v[i] ){
t[i] = w[dr];
w[dr + 1] = i;
}
}
}
fout << nr << "\n";
drum( w[nr] );
return 0;
}