Pagini recente » Cod sursa (job #2721941) | Cod sursa (job #2236886) | Cod sursa (job #149680) | Cod sursa (job #1789345) | Cod sursa (job #2212342)
#include <iostream>
#include <fstream>
using namespace std;
const int Maxx=1e5+1;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int best[Maxx];
int bun[Maxx];
int L[Maxx];
int A[Maxx];
int n,poz,i,lgmx;
int ans;
void afis(int x)
{
if (bun[x]>0) afis(bun[x]);
fout<<A[x]<<" ";
}
int caut(int x)
{
int lo=0;
int hi=lgmx;
int ret,mid;
while (lo <= hi)
{
mid=(lo+hi)/2;
if (A[L[mid]]<x)
{
lo=mid+1;
ret=mid;
} else hi=mid-1;
}
return ret;
}
int main()
{
fin>>n;
for (i=1;i<=n;i++) fin>>A[i];
best[1]=L[1]=1;
lgmx=1;
for (i=2;i<=n;i++)
{
poz=caut(A[i]);
bun[i]=L[poz];
best[i]=poz+1;
L[poz+1]=i;
lgmx=max(lgmx,poz+1);
}
for (i=1;i<=n;i++)
if (ans<best[i])
{
ans=best[i];
poz=i;
}
fout<<ans<<"\n";
afis(poz);
return 0;
}