Pagini recente » Cod sursa (job #2946344) | Cod sursa (job #1066793) | Cod sursa (job #1012723) | Cod sursa (job #2161077) | Cod sursa (job #1649994)
#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] << " ";
}
}
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 = 1; i <= n; i++ ){
if( v[ w[nr] ] < v[i] ){
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] ){
w[ dr + 1 ] = i;
t[i] = w[dr];
}
}
}
fout << nr << "\n";
drum( w[nr] );
return 0;
}