Pagini recente » Cod sursa (job #1607417) | Cod sursa (job #2376850) | Cod sursa (job #567527) | Cod sursa (job #3230518) | Cod sursa (job #2460978)
#include <fstream>
#define NM 100100
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int sir[NM], P[NM], v[NM], poz, lgm, pm, lg[NM], N, ls;
void scan();
int caut(int x);
void print(int k);
int main()
{
scan();
lg[1]=1;
sir[1]=1;
P[1]=0;ls=1;
for(int i=2; i<=N; ++i)
{
poz=caut(v[i]);
lg[i]=poz+1;
P[i]=sir[poz];
sir[poz+1]=i;
if(lg[i]>lgm)
lgm=lg[i], pm=i;
if(poz+1>ls)
ls=poz+1;
}
cout<<lgm<<'\n';
print(pm);
return 0;
}
void scan()
{
cin>>N;
for(int i=1; i<=N; ++i)
cin>>v[i];
}
int caut(int x)
{
int st=0, dr=ls, mij=0;
while(st<=dr)
{
mij=(st+dr)/2;
if(v[sir[mij]]<x &&v[sir[mij+1]]>=x)
return mij;
else if(v[sir[mij+1]]<x)
st=mij+1;
else dr=mij-1;
}
return ls;
}
void print(int k)
{
if(P[k])
print(P[k]);
cout<<v[k]<<' ';
}