Pagini recente » Cod sursa (job #2310733) | Cod sursa (job #2480859) | Cod sursa (job #2357127) | Cod sursa (job #978790) | Cod sursa (job #3174434)
#include <fstream>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int n,v[100005];
int l[100005],poz[100005];
int cb(int x,int st,int dr)///cel mai mic nr mai mare decat x
{
int rez=1;
while(st<=dr)
{
int mij=(st+dr)/2;
if(l[mij]>=x)
dr=mij-1,rez=mij;
else if(l[mij]<x)
st=mij+1;
}
return rez;
}
int main()
{
cin>>n;
for(int i=1; i<=n; i++)cin>>v[i];
l[1]=v[1];
int li=1;
poz[1]=1;
for(int i=2; i<=n; i++)
{
if(v[i]>l[li])///continua subsirul
{
l[++li]=v[i];
poz[i]=li;
}
else if(v[i]<l[li])
{
int poz1=cb(v[i],1,li);///
l[poz1]=v[i];
poz[i]=poz1;
}
}
cout<<li<<'\n';
int sol[105],k=0;
int aux=10000000;
int pozmax=li;
for(int i=n;i>=1;i--)
{
if(poz[i]==pozmax && aux>v[i])
{
pozmax--;
//cout<<v[i]<<" ";
sol[k++]=v[i];
}
}
for(int i=k-1;i>=0;i--)
cout<<sol[i]<<" ";
return 0;
}