Pagini recente » Cod sursa (job #1409966) | Monitorul de evaluare | Cod sursa (job #3150355) | Cod sursa (job #134328) | Cod sursa (job #2017464)
#include<stdio.h>
using namespace std;
int v[100005],d[100005],poz[100005];
int main(){
int i,n,l1,l2,mij,nr,p,cnr;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
d[1]=v[1];
poz[1]=1;
nr=1;
for(i=2;i<=n;i++){
if(v[i]>d[nr]){
nr++;
d[nr]=v[i];
poz[i]=nr;
}
else{
l1=1;
l2=nr;
while(l1<=l2){
mij=(l1+l2)/2;
if(d[mij]>=v[i]){
p=mij;
l2=mij-1;
}
else
l1=mij+1;
}
d[p]=v[i];
poz[i]=p;
}
}
cnr=nr;
for(i=n;i>=1;i--)
if(poz[i]==nr&&nr>0){
d[nr]=v[i];
nr--;
}
printf("%d\n",cnr);
for(i=1;i<=cnr;i++)
printf("%d ",d[i]);
return 0;
}