Pagini recente » Cod sursa (job #812700) | Cod sursa (job #147975) | Cod sursa (job #1586141) | Cod sursa (job #584596) | Cod sursa (job #579930)
Cod sursa(job #579930)
#include <stdio.h>
FILE *f=fopen("scmax.in","r"),*g=fopen("scmax.out","w");
int n,v[100001],l[100001],bst[100001],pr[100001],i,pos,s,nr=1,max=1,k;
int main(void)
{
fscanf(f,"%d",&n);
for (i=1;i<=n;i++)
fscanf(f,"%d",&v[i]);
bst[1]=1;
l[1]=1;
pr[1]=0;
for (i=2;i<=n;i++)
{
k=1;
s=0;
while (k<=nr) k*=2;
k/=2;
while (k>=1)
{
if (s+k<=nr && v[l[s+k]]<v[i]) {pos=s+k; s+=k;}
k/=2;
}
bst[i]=bst[l[pos]]+1;
pr[i]=l[pos];
l[pos+1]=i;
if (nr==pos) nr++;
if (bst[i]>bst[max]) max=i;
}
fprintf(g,"%d\n",bst[max]);
i=max;
while (i)
{
l[++l[0]]=i;
i=pr[i];
}
for (i=l[0];i>=1;i--)
fprintf(g,"%d ",v[l[i]]);
}