Pagini recente » Cod sursa (job #2239717) | Cod sursa (job #17414) | Cod sursa (job #2532949) | Cod sursa (job #751256) | Cod sursa (job #1327345)
#include <cstdio>
using namespace std;
int a[100001],t[100001],
cb[100001],ind[100001],n;
int main()
{
FILE *f=fopen("scmax.in","r");
fscanf(f,"%d",&n);
int i,lmax=1,s,d,m;
for(i=1;i<=n;i++)
fscanf(f,"%d",&a[i]);
t[1]=0;
cb[1]=a[1];ind[1]=1;
for(i=2;i<=n;i++)
{//kutam binar a[i] in cb intre indicii 1 shi lmax
s=1;d=lmax;m=(s+d)/2;
while(s<=d && cb[m]!=a[i])
{
if(a[i]<cb[m])
d=m-1;
else
s=m+1;
m=(s+d)/2;
}
if(s>d)
if(s>lmax)
{
cb[++lmax]=a[i];
ind[lmax]=i;
t[i]=ind[lmax-1];
}
else
{
cb[s]=a[i];
ind[s]=i;
t[i]=ind[d];
}
else
t[i]=ind[m-1];
}
f=fopen("scmax.out","w");
fprintf(f,"%d\n",lmax);
i=ind[lmax];
s=lmax;
while(i)
{
ind[s--]=a[i];
i=t[i];
}
for(i=1;i<=lmax;i++)
fprintf(f,"%d ",ind[i]);
return 0;
}