Pagini recente » Cod sursa (job #1408575) | Cod sursa (job #1802725) | Cod sursa (job #1194349) | Cod sursa (job #887439) | Cod sursa (job #1814368)
#include <iostream>
#include<fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,i,v[100001],d[100001],j,mx,pmax,p,ans[100001],k;
int caut_bin(int ls,int ld)
{
if(ls<=ld)
{
int m=(ls+ld)/2;
if(d[m]+1 > d[i] && v[i] > v[m])
{
pmax=m;
caut_bin(m+1,ld);
}
else
{
caut_bin(ls,m-1);
}
}
return pmax;
}
int main()
{
f>>n;
for(i=1; i<=n; i++)
f>>v[i],d[i]=1;
for(i=1; i<=n; i++)
{
j=caut_bin(1,i);
if(d[i]<d[j]+1 && v[j]<v[i])
{
d[i]=d[j]+1;
mx=max(mx,d[i]);
pmax=i;
}
}
g<<mx<<'\n';
ans[++k]=v[pmax];
p=mx;
j=pmax;
for(i=n; i>=1; i--)
if(d[i]==p-1 && v[i]<v[j])
{
p--;
j=i;
ans[++k]=v[i];
}
for(i=k;i>0;i--)
g<<ans[i]<<' ';
}