Pagini recente » Cod sursa (job #1114050) | Cod sursa (job #2131784) | Cod sursa (job #635898) | Cod sursa (job #2821969) | Cod sursa (job #1116936)
#include<cstdio>
using namespace std;
#define MAX 100001
int N , v[MAX] , l[MAX] , p[MAX] , nr , k;
void cauta(int x);
int main()
{
freopen("scmax.in" , "r" , stdin );
freopen("scmax.out" , "w" , stdout );
scanf("%d" , &N );
for(int i = 1 ; i <= N ; ++i )
scanf("%d" , &v[i] );
l[1] = v[1];
p[1] = nr = 1;
for(int i = 2 ; i <= N ; ++i )
{
if(v[i] > l[nr])
{
l[++nr] = v[i];
k = nr;
}
else
cauta(v[i]);
p[i] = k;
}
printf("%d\n" , nr);
int aux = nr;
for(int i = N ; i ; i--)
if(p[i] == aux)
l[aux--] = v[i];
for(int i = 1 ; i <= nr ; ++i )
printf("%d " , l[i]);
return 0;
}
void cauta(int x)
{
int ls , ld , m;
ls = 0;ld = nr;
while(ls <=ld)
{
m = (ls+ld)/2;
if(l[m] < x && x <= l[m+1])
{
l[m+1] = x;
k = m+1;
return;
}
else
if(l[m] < x)ls = m+1;
else ld = m;
}
}