Pagini recente » Cod sursa (job #2399964) | Cod sursa (job #1060198) | Cod sursa (job #176626) | Cod sursa (job #1755314) | Cod sursa (job #1356974)
#include <fstream>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
#define nmax 100010
int n,v[nmax],poz[nmax],pred[nmax],s[nmax],k,t,l,p,u,mij;
int i,j,val, st,dr;
int bsearch(int st, int dr, int nr)
{
int mij=(st+dr)/2;
if(st>dr)
return st;
if (nr<=v[poz[mij]])
bsearch(st, mij-1,nr);
else
bsearch(mij+1,dr,nr);
}
int main()
{
cin>>n;
for (i=1;i<=n;i++)
cin>>v[i];
poz[1]=1;
l=1;
for (i=2;i<=n;i++)
{
val=bsearch(1,l,v[i]);
pred[i]=poz[val-1];
poz[val]=i;
if (val>l)
l=val;
}
k=poz[l];
for (i=l;i;i--)
{
s[i]=v[k];
k=pred[k];
}
cout<<l<<'\n';
for (i=1;i<=l;i++)
cout<<s[i]<<" ";
}