Pagini recente » Cod sursa (job #1375271) | Cod sursa (job #459440) | Istoria paginii utilizator/victormura | Cod sursa (job #1305053) | Cod sursa (job #410833)
Cod sursa(job #410833)
# include <fstream.h>
ifstream f ("scmax.in");
ofstream g ("scmax.out");
int a[100005],s[100005],i,j,poz,n,m,x,k,l[100005];
void caut (int i,int j)
{
int mij=(i+j)/2;
if (s[mij]>=x && s[mij-1]<x)
poz=mij;
else
if (s[mij]>x)
caut (i,mij-1);
else
caut (mij+1,j);
}
int main ()
{
f>>n;
for (i=1;i<=n;i++)
f>>a[i];
s[1]=a[1];
m=1;
for (i=2;i<=n;i++)
{
x=a[i];
if (s[m]<x)
{
m++;
s[m]=x;
l[i]=m;
}
else
{
caut (1,m);
s[poz]=x;
l[i]=poz;
}
}
g<<m<<"\n";
k=0;
x=3;
for (i=n;i>=1;i--)
{
if (l[i]==x)
{ k++;
s[k]=i;
x--;
}
}
for (i=m;i>=1;i--)
g<<a[s[i]]<<" ";
return 0;
}