Pagini recente » Cod sursa (job #2103044) | Cod sursa (job #2109932) | Cod sursa (job #1473864) | Cod sursa (job #2706619) | Cod sursa (job #1397988)
#include <iostream>
#include <fstream>
#define NMAX 100004
using namespace std;
int A[NMAX],B[NMAX];
int s[NMAX];
int l,maxx,n,i,j,maxpoz,maxt=0;
int cautarebinara()
{
int k,step=1;
for(;step<i;step<<=1);
for(k=1;step;step>>=1)
if(k+step<=i && A[k+step]<A[i])
k+=step;
if(k==1 && A[k]>=A[i]) return 0;
return k;
}
int main()
{
ifstream f("scmax.in");
ofstream g("scmax.out");
f>>n;
for(i=1;i<=n;i++)
{
f>>A[i];
l=1;maxx=1;
//for(j=1;j<i;j++)
// if(A[j]<A[i] && B[j]+1>maxx)
l=B[cautarebinara()]+1;// B[j]+1;
B[i]=l;
if(B[i]>maxt)
{
maxt=B[i];
maxpoz=i;
}
}
g<<maxt<<"\n";
int val=maxt;
for(i=maxpoz;i>0;i--)
if(B[i]==val)
{
s[i]=A[i];
val--;
}
for(i=1;i<=maxpoz;i++)
if(s[i]) g<<s[i]<<" ";
}