Pagini recente » Cod sursa (job #1512349) | Cod sursa (job #2773246) | Cod sursa (job #1302996) | Cod sursa (job #1658347) | Cod sursa (job #3262199)
#include <bits/stdc++.h>
#define cin in
#define cout out
#define lmx 100001
using namespace std;
ifstream in ("scmax.in");
ofstream out ("scmax.out");
int bSerch(int v[], int x, int st, int dr)
{
if(st==dr)
return st;
int mij=(st+dr)/2;
if(v[mij]>=x)
return bSerch(v, x, st, mij);
return bSerch(v, x, mij+1, dr);
}
int main()
{
int A[lmx]={0}, B[lmx]={0}, dp[lmx]={0}, R[lmx]={0};
int n;
cin>>n;
for(int i=1; i<=n; i++)
{
cin>>A[i];
B[i]=INT_MAX;
}
for(int i=1;i<=n;i++)
{
int poz=bSerch(B,A[i],0,n);
dp[i]=poz;
B[poz]=A[i];
}
int lmax=0;
for(int i=1; i<=n; i++)
lmax=max(lmax, dp[i]);
cout<<lmax;
int cpy=lmax;
for(int i=n; i>=1; i--)
{
if(dp[i]==lmax)
{
R[lmax]=A[i];
lmax--;
}
}
cout<<'\n';
for(int i=1;i<=cpy;i++)
cout<<R[i]<<' ';
}