Pagini recente » Cod sursa (job #3154595) | Cod sursa (job #273629) | Cod sursa (job #866820) | Cod sursa (job #1571882) | Cod sursa (job #931736)
Cod sursa(job #931736)
#include <iostream>
#include<cstdio>
using namespace std;
int val[100005];
int pred[100005];
int v[100005], dim;
FILE *in,*out;
void scrie(int x)
{
if(x!=0)
scrie(pred[x]);
if(x)
fprintf(out,"%d ",v[x]);
}
int bin(int x)
{
int pas=1<<18,i=0;
while(pas>=1)
{
if(i+pas<=dim && v[val[pas+i]]<x)
{
i=i+pas;
}
pas=pas>>1;
}
if (i == dim)
++dim;
return i+1;
}
int main()
{
in=fopen("scmax.in","r");
out=fopen("scmax.out","w");
int n,k,i,j,l;
fscanf(in,"%d",&n);
for(i=1;i<=n;i++)
{
fscanf(in,"%d",&v[i]);
}
for(i=1;i<=n;i++)
{
l=bin(v[i]);
pred[i]=val[l-1];
val[l]=i;
}
fprintf(out,"%d\n",dim);
scrie(val[dim]);
return 0;
}