Pagini recente » Cod sursa (job #1971066) | Cod sursa (job #803315) | Cod sursa (job #2582162) | Cod sursa (job #1137771) | Cod sursa (job #797172)
Cod sursa(job #797172)
#include<stdio.h>
int v[100001],l[100001],p[100001],q[100001],u,n,poz,max;
FILE *fin,*fout;
void citire()
{
fin=fopen("scmax.in","r");
fscanf(fin,"%d",&n);
for(int i=1;i<=n;i++)
{
fscanf(fin,"%d",&v[i]);
}
}
int cauta(int x)
{
int st=1,sf=max,m;
while(st<=sf)
{
m=(st+sf)/2;
if(v[l[m]]<v[x])
{
st=m+1;
}
else
sf=m-1;
}
return st;
}
void rec(int x)
{
if(p[x]!=0)
rec(p[x]);
fprintf(fout,"%d ",v[x]);
}
void afisare()
{
fout=fopen("scmax.out","w");
fprintf(fout,"%d\n",max);
for(int i=1;i<=n;i++)
{
if(q[i]==max)
{
rec(i);
break;
}
}
}
int main()
{
citire();
q[1]=1;
l[1]=1;
max=1;
for(int i=2;i<=n;i++)
{
poz=cauta(i);
l[poz]=i;
q[i]=poz;
p[i]=l[poz-1];
if(poz>max)
max=poz;
}
afisare();
return 0;
}