Pagini recente » Cod sursa (job #2695673) | Cod sursa (job #784044) | Cod sursa (job #1627760) | Cod sursa (job #818813) | Cod sursa (job #1429367)
#include <cstdio>
#define MAX 100001
using namespace std;
int mic[MAX],v[MAX],pred[MAX],sol[MAX];
int n,nr,bot=1;
FILE *fin,*fout;
int cb(int x)
{
int i=0,pas=1<<16;
while(pas > 0)
{
if(i + pas <=nr)
if(v[mic[i+pas]]<x)
i+=pas;
pas>>=1;
}
return i;
}
void sub(int i)
{
if(pred[i]!=0)
sub(pred[i]);
fprintf(fout, "%d ", v[i]);
}
int main()
{
fin=fopen("scmax.in","r");
fout=fopen("scmax.out","w");
fscanf(fin,"%d",&n);
int j,i;
for(i=1; i<=n; i++)
{
fscanf(fin,"%d",&v[i]);
}
nr=0;
mic[++nr]=1;
for(i=2; i<=n; i++)
{
j=cb(v[i]);
pred[i]=mic[j];
mic[j+1]=i;
if(j==nr) nr++;
}
fprintf(fout,"%d\n",nr);
sub(mic[nr]);
/*
for(i=1; i<=bot; i++)
fprintf(fout,"%d ",sol[i]);
*/
return 0;
}