Pagini recente » Cod sursa (job #2128992) | Cod sursa (job #946047) | Cod sursa (job #1737712) | Cod sursa (job #2528583) | Cod sursa (job #1653506)
#include<cstdio>
using namespace std;
int i,n,m=0,med,ans,l,r;
int v[100001],q[100001],p[100001];
FILE *in,*out;
int main ()
{
in=fopen("scmax.in","r");
out=fopen("scmax.out","w");
fscanf(in,"%d",&n);
for(i=1;i<=n;i++)
{
fscanf(in,"%d",&v[i]);
l=1;
r=m;
ans=0;
while(l <= r)
{
med = (l + r) / 2;
if(q[med] < v[i])
{
l = med + 1;
//ans = med;
}
else
{
r = med - 1;
ans = med;
}
}
if(ans == 0)
{
m ++;
ans = m;
}
q[ans]=v[i];
p[i]=ans;
}
med = m;
fprintf(out,"%d\n",m);
for(i=n;i>0 && m;i--)
if(p[i]==m)
{
q[m]=v[i];
m--;
}
for(i=1;i<=med;i++)
fprintf(out,"%d ",q[i]);
return 0;
}