Pagini recente » Cod sursa (job #1710230) | Cod sursa (job #93129) | Cod sursa (job #2724544) | Cod sursa (job #111587) | Cod sursa (job #1167957)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int nmax= 100000;
int v[nmax+1], x[nmax+1], p[nmax+1], ans[nmax+1];
int main( ) {
int n, n2, k= 0;
fin>>n;
for ( n2= 1; 2*n2<=n; n2*= 2 ) ;
for ( int i= 1; i<=n; ++i ) {
fin>>v[i];
if ( v[x[k]]<v[i] ) {
p[i]= x[k], x[++k]= i;
} else {
int sol= 0;
for ( int step= n2; step; step/= 2 ) {
if ( sol+step<=k && v[x[sol+step]]<v[i] ) {
sol+= step;
}
}
p[i]= x[sol], x[sol+1]= i;
}
}
fout<<k<<"\n";
for ( int i= x[k], a= k; i!=0; i= p[i], --a ) {
ans[a]= v[i];
}
for ( int i= 1; i<=k; ++i ) {
fout<<ans[i]<<" ";
}
fout<<"\n";
return 0;
}