Pagini recente » Cod sursa (job #2411826) | Cod sursa (job #3274786) | Cod sursa (job #308594) | Cod sursa (job #665681) | Cod sursa (job #1654681)
#include<cstdio>
using namespace std;
int v[100001],q[100001],p[100001],vec[100001];
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n,i,nr,poz=1,l1,l2,m,poz2,c;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
q[1]=v[1];
p[1]=1;
for(i=2;i<=n;i++){
if(v[i]>q[poz]){
q[++poz]=v[i];
p[i]=poz;}
else{
l1=1;
l2=poz;
while(l1<=l2){
m=(l1+l2)/2;
if(q[m]>v[i]){
l2=m-1;
poz2=m;}
else
l1=m+1;}
q[poz2]=v[i];
p[i]=poz2;}
}
c=poz;
poz=0;
printf("%d\n",c);
for(i=n;i>=1&&c!=0;i--)
if(p[i]==c){
vec[++poz]=v[i];
c--;}
for(i=poz;i>=1;i--)
printf("%d ",vec[i]);
return 0;
}