Pagini recente » Cod sursa (job #2240005) | Cod sursa (job #2734777) | Cod sursa (job #1439776) | Cod sursa (job #2148272) | Cod sursa (job #1903828)
#include <iostream>
#define MAX 100001
#include <limits.h>
#include <fstream>
using namespace std;
int n,a[MAX],B[MAX],P[MAX],s[MAX],L[MAX],maxim,nr;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
void afis(int i)
{
if(P[i]>0)afis(P[i]);
fout<<a[i]<<" ";
}
void citire(int &n,int a[])
{ fin>>n;
for(int i=1;i<=n;++i)
fin>>a[i];
}
int caut(int x)
{int li,ls,m;
li=0;ls=nr;m=(li+ls)/2;
while(li<=ls)
{
if(a[L[m]]<x && a[L[m+1]]>=x) return m;
else if(a[L[m+1]]<x)li=m+1,m=(li+ls)/2;
else ls=m-1,m=(li+ls)/2;
}
return nr;
}
void calcul(int a[])
{int i,poz;
nr=1;
B[1]=1;L[1]=1;L[0]=0;
for(int i=2;i<=n;++i)
{poz=caut(a[i]);
P[i]=L[poz];
B[i]=poz+1;
L[poz+1]=i;
if(nr<poz+1)nr=poz+1;
}
maxim=0;poz=0;
for(i=1;i<=n;++i)
if(maxim<B[i])maxim=B[i],poz=i;
afis(poz);
}
int main()
{
citire(n,a);
calcul(a);
return 0;
}