Cod sursa(job #1371502)

Utilizator dica69Alexandru Lincan dica69 Data 3 martie 2015 21:55:14
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <cstdio>
#define Nmax 100001

using namespace std;
FILE *f1 = fopen("scmax.in","r");
FILE *f2 = fopen("scmax.out","w");

long n,a[Nmax],i,poz[Nmax],b[Nmax],k,m;

long caut(long p,long u,long x)
{long m;
while (p<=u)
{m=(p+u)/2;
if (x<a[b[m]]) p=m+1;
else u=m-1;
}
return p;
}


int main()
{fscanf(f1,"%ld",&n);
for (i=1;i<=n;i++) fscanf(f1,"%ld",&a[i]);
for (i=n;i>=1;i--)
{k=caut(1,m,a[i]);
poz[i]=b[k-1];
if (k>m)
{b[k]=i;
m=k;
}
else if (a[i]>a[b[k]]) b[k]=i;
}
fprintf(f2,"%ld\n",m);
for (i=b[m];i>0;i=poz[i]) fprintf(f2,"%ld ",a[i]);
fclose(f1);
fclose(f2);
    return 0;
}

//Challenges are what make life interesting and overcoming them is what makes life meaningful.