Pagini recente » Cod sursa (job #2488089) | Cod sursa (job #187921) | Cod sursa (job #2154150) | Cod sursa (job #1048628) | Cod sursa (job #2216182)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int NMAX = 100005;
const int INF = 2000000005;
int v[NMAX],a[NMAX],afis[NMAX],x[NMAX];
int cautbin(int x)
{
int st=1,sol=1;
int dr=NMAX-5,mij;
while(st<=dr)
{
mij=(st+dr)/2;
if(x<=v[mij])
{
dr=mij-1;
sol=mij;
}
else if(x>v[mij])
{
st=mij+1;
}
}
return sol;
}
int main()
{
int n;
fin >> n;
for(int i=1;i<=NMAX-5;i++) v[i]=INF;
for(int i=1;i<=n;i++)
{
fin >> x[i];
int k=cautbin(x[i]);
v[k]=x[i];
a[i]=k;
}
int lungime=0;
for(int i=1;i<=n;i++)
{
if(v[i]==INF) break;
lungime=i;
}
fout << lungime << '\n';
int last=INF,ind=0;
for(int i=n;i>=1;i--)
{
if(a[i]==lungime and x[i]<last)
{
last=x[i];
afis[++ind]=last;
lungime--;
}
}
for(int i=ind;i>=1;i--)
{
fout << afis[i] << ' ';
}
return 0;
}