Pagini recente » Cod sursa (job #2529045) | Cod sursa (job #2448379) | Cod sursa (job #2793351) | Cod sursa (job #3178153) | Cod sursa (job #1865722)
#include <cstdio>
#define ll 100010
using namespace std;
int a[ll],t[ll],last[ll],ind[ll],n,m,p,li,lf,i;
//p=kte elemente am last
int main()
{
FILE *f=fopen("scmax.in","r");
fscanf(f,"%d%d",&n,&a[1]);
last[p=1]=a[1];
ind[1]=1;t[1]=0;
for(i=2;i<=n;i++)
{
fscanf(f,"%d",&a[i]);
//cautam binar a[i] in vectorul last
li=1;lf=p;
m=(li+lf)/2;
while(li<=lf)
{
if(a[i]<=last[m])
lf=m-1;
else
li=m+1;
m=(li+lf)/2;
}
if(li>p)
{
last[++p]=a[i];
ind[p]=i;
t[i]=ind[p-1];
}
else if(lf==0||last[lf]!=a[i])
{
last[li]=a[i];
ind[li]=i;
t[i]=ind[li-1];
}
}
fclose(f);
f=fopen("scmax.out","w");
fprintf(f,"%d\n",p);
i=ind[p];
int k=p;
while(i)
{//refolosim vectorul ind ca shi-asha NU ne mai trebuie
ind[k--]=a[i];
i=t[i];
}
for(i=1;i<=p;i++)fprintf(f,"%d ",ind[i]);
return 0;
}