Pagini recente » Cod sursa (job #864656) | Cod sursa (job #3231851) | Cod sursa (job #1381122) | Cod sursa (job #2422613) | Cod sursa (job #1615396)
#include <cstdio>
int n,k,i,a[100005],v[100005],tata[100005],poz,lmax,ult;
int cautare(int p, int u, int nr)
{
while(p <= u){
int mij = (p+u)/2;
if(nr == a[v[mij]])
return mij;
if(nr<a[v[mij]])
u = mij-1;
else
p = mij+1;
}
return p;
}
void afisare(int i)
{
if(tata[i]!=0) afisare(tata[i]);
printf("%d ",a[i]);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);k=0;
for( i = 1; i <= n; i++ )
{
scanf("%d",&a[i]);
poz= cautare(1, k, a[i]);
v[poz]=i;
tata[i] =v[poz-1];
if(poz>k)k++;
if(poz>lmax)
{
lmax = poz;
ult=i;
}
}
printf("%d\n",lmax);
afisare(ult);
return 0;
}