Pagini recente » Cod sursa (job #639521) | Cod sursa (job #2052933) | Cod sursa (job #2770981) | Cod sursa (job #1753241) | Cod sursa (job #3261644)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int A[100001];
int B[100001];
int dp[100001];
int R[100001];
int caut_binar(int b[], int x,int st,int dr)
{
if(st==dr)
return st;
int mijl=(st+dr)/2;
if(b[mijl]>=x)
return caut_binar(b,x,st,mijl);
return caut_binar(b,x,mijl+1,dr);
}
int main()
{
int n;
fin>>n;
for(int i=1;i<=n;i++)
B[i]=INT_MAX;
for(int i=1;i<=n;i++)
{
fin>>A[i];
}
B[0]=0;
//B[1]=1;
for(int i=1;i<=n;i++)
{
int poz=caut_binar(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]);
}
fout<<lmax;
int cop_lmax=lmax;
for(int i=n;i>=1;i--)
{
if(dp[i]==lmax)
{
R[lmax]=A[i];
lmax--;
}
}
fout<<'\n';
for(int i=1;i<=cop_lmax;i++)
fout<<R[i]<<" ";
return 0;
}