Pagini recente » Cod sursa (job #3143947) | Cod sursa (job #2652052) | Cod sursa (job #2504800) | Cod sursa (job #1455553) | Cod sursa (job #513143)
Cod sursa(job #513143)
#include <stdio.h>
#define max 2000001;
int n,a[100001],p[100001],q[100001],sol[100001];
int lg,m,i;
int insert(int x,int st,int dr) {
int m;
m=(st+dr)/2;
if (st==dr) {
if (dr>lg) {
lg++;
q[lg+1]=max;
}
q[st]=x;
return st;
}
if (x<=q[m]) return insert(x,st,m);
else return insert(x,m+1,dr);
}
void afis() {
int i;
for (i=lg; i>=1; i--) {
while (p[m]!=i) m--;
sol[i]=a[m];
}
printf("%d\n",lg);
for (i=1; i<=lg; i++) printf("%d ",sol[i]);
}
int main () {
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for (i=1; i<=n; i++) scanf("%d",&a[i]);
lg=0;
q[1]=max;
for (i=1; i<=n; i++)
p[i]=insert(a[i],1,lg+1);
m=n;
afis();
return 0;
}