Pagini recente » Cod sursa (job #750378) | Cod sursa (job #783326) | Cod sursa (job #2507235) | Cod sursa (job #2625115) | Cod sursa (job #174882)
Cod sursa(job #174882)
#include <cstdio>
const int maxn = 100001;
const int inf = 2000000002;
FILE *in = fopen("scmax.in","r"), *out = fopen("scmax.out","w");
int n;
int a[maxn];
int p[maxn];
int l;
int q[maxn];
int st[maxn];
void read()
{
fscanf(in, "%d", &n);
for ( int i = 1; i <= n; ++i )
fscanf(in, "%d", &a[i]), q[i] = inf;
}
int binsearch(int st, int dr, int what)
{
int m = 0;
while ( st < dr )
{
m = (st + dr) >> 1;
if ( q[m] >= what )
dr = m;
else
st = m + 1;
}
return st;
}
void go()
{
int k = 0;
for ( int i = 1; i <= n; ++i )
{
k = binsearch(1, l+1, a[i]);
if ( q[k] == inf )
++l;
q[k] = a[i];
p[i] = k;
}
fprintf(out, "%d\n", l);
k = 0;
for ( int i = n; i; --i )
if ( p[i] == l )
st[++k] = a[i], --l;
for ( int i = k; i; --i )
fprintf(out, "%d ", st[i]);
}
int main()
{
read();
go();
return 0;
}