Pagini recente » Cod sursa (job #1649555) | Cod sursa (job #2433356) | Cod sursa (job #1577892) | Cod sursa (job #551153) | Cod sursa (job #791443)
Cod sursa(job #791443)
#include <cstdio>
using namespace std;
long x[100001];
long q[100001];
long p[100001];
long sol[100001];
long cautbin (long st , long dr , long val) {
long m,last=dr+1;
while (st<=dr) {
m=(st+dr)/2;
if (q[m]>=val) {
last=m;
dr=m-1;
}
else st=m+1;
}
return last;
}
int main () {
long n,i,u=0,j,max=-1,poz,k;
freopen ("scmax.in","r",stdin);
freopen ("scmax.out","w",stdout);
scanf ("%ld",&n);
for (i=1;i<=n;i++)
scanf ("%ld",&x[i]);
for (i=1;i<=n;i++) {
k=cautbin (1,u,x[i]);
q[k]=x[i];
if (k>u)
u++;
p[i]=k;
if (k>max) {
max=k;
poz=i;
}
}
printf ("%ld\n",max);
sol[++sol[0]]=x[poz];
i=poz-1;
max--;
for (;i>=1;i--)
if (p[i]==max) {
max--;
sol[++sol[0]]=x[i];
}
for (i=sol[0];i>=1;i--)
printf ("%ld ",sol[i]);
printf ("\n");
return 0;
}