Cod sursa(job #629103)

Utilizator Daniel30daniel Daniel30 Data 2 noiembrie 2011 17:23:35
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<cstdio>
#define NMAX 100003
using namespace std;
int a[NMAX],l[NMAX],poz[NMAX],b[NMAX];
int n,u,p,m,i,max;
using namespace std;
void cit()
{freopen("scmax.in","rt",stdin);
 freopen("scmax.out","wt",stdout);
 scanf("%d",&n);
 for(i=1;i<=n;i++) scanf("%d", &a[i]);
}
//void afis(int f)
//{if(f)
//      {afis(l[f]);
//       printf("%d ",a[f]);
//     }
//}
int main()
{cit();
 poz[1]=1;
 max=1;
 for(i=2;i<=n;i++)
    {p=1;
	 u=max;
	 while(p<=u)
        {m=(u-p)/2+p;
	     if(a[i]>a[poz[m]]) p=m+1;
	       else u=m-1;
        }
     if(p>max) max++;
	 poz[p]=i;
	 l[i]=poz[p-1];
     }
 printf("%d\n",max);
// afis(poz[max]);
 int f=poz[max],j=1;
 while(f) {b[j++]=a[f]; f=l[f];}
 for(int i=max;i>=1;i--) printf("%d ",b[i]);
 printf("\n");
 return 0;
}