Pagini recente » Cod sursa (job #346990) | Cod sursa (job #1836859) | Cod sursa (job #1828741) | Cod sursa (job #1342219) | Cod sursa (job #1768344)
#include <cstdio>
const int NMAX = 100000;
using namespace std;
int v[NMAX+5], d[NMAX+5], t[NMAX+5], sol[NMAX+5];
int main() {
freopen ( "scmax.in", "r", stdin );
freopen ( "scmax.out", "w", stdout );
int n, i, ed, st, dr, mid, el, x;
scanf ( "%d", &n );
for ( i = 1 ; i <= n ; ++ i )
scanf ( "%d", &v[i] );
ed = 1;
d[1] = 1;
for ( i = 2 ; i <= n ; ++ i ) {
st = 1;
dr = ed;
while ( st <= dr ) {
mid = ( st + dr ) / 2;
if ( v[d[mid]] >= v[i] )
dr = mid - 1;
else
st = mid + 1;
}
if ( st == ed + 1 )
ed++;
d[st]=i;
t[i]=d[st-1];
}
printf ( "%d\n", ed );
x = d[ed];
el = 0;
while ( x ) {
sol[++el]=v[x];
x=t[x];
}
for ( i = el ; i > 0 ; -- i )
printf ( "%d ",sol[i] );
return 0;
}