Pagini recente » Istoria paginii runda/hlo_cj_av_l2/clasament | Cod sursa (job #195816) | Cod sursa (job #1888022) | Cod sursa (job #160922) | Cod sursa (job #1157628)
#include<fstream>
#include<algorithm>
#include<inttypes.h>
#define M 2000000000
using namespace std;
FILE *f=fopen("scm.in","r");
FILE *g=fopen("scm.out","w");
int n,q[100010],poz[100010],lung;
int sol[100010],v[100010];
int cauta(int x)
{
int inc=1,sf=lung,m;
while(inc<=sf)
{
m=(inc+sf)/2;
if(q[m]<x)
inc=m+1;
else sf=m-1;
}
if(inc==lung+1){lung++;return lung;}
return inc;
}
void afis()
{
int i=lung,j=n,k=0;
while(j>=1&&i)
{
if(poz[j]==i){sol[++k]=v[j];i--;}
j--;
}
j=lung;
while(j>=1){fprintf(g,"%d ",sol[j]);j--;}
}
int main()
{
int i,p;
fscanf(f,"%d",&n);
q[1]=M;
for(i=1;i<=n;i++)
{
fscanf(f,"%d",&v[i]);
p=cauta(v[i]);
if(p==lung+1){lung++;q[lung+1]=M;}
q[p]=v[i];
poz[i]=p;
}
fprintf(g,"%d\n",lung);
afis();
return 0;
}