Pagini recente » Cod sursa (job #2562849) | Cod sursa (job #2853072) | Cod sursa (job #1561008) | Cod sursa (job #548895) | Cod sursa (job #2308397)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int SIZE=100000;
int x[SIZE+1], scm[SIZE+1], pos[SIZE+1], sol[SIZE+1];
int n, Max;
int main()
{
fin>>n;
for(int i=1; i<=n; ++i) fin>>x[i];
for(int i=1; i<=n; ++i)
{
if(x[i]>scm[Max])
{
pos[i]=Max+1;
scm[++Max]=x[i];
}
else
{
int st=1, dr=Max;
int mij;
while(st<=dr)
{
mij=(st+dr)/2;
if(scm[mij]>x[i]) dr=mij-1;
else if(scm[mij]<x[i]) st=mij+1;
else break;
}
if(st<=dr) pos[i]=mij;
else if(st<=Max)
{
scm[st]=x[i];
pos[i]=st;
}
}
}
fout<<Max<<"\n";
int k=0;
for(int i=n; i>=1; --i)
{
if(pos[i]==Max && Max>0)
{
sol[++k]=x[i];
--Max;
}
}
for(int i=k; i>=1; --i) fout<<sol[i]<<" ";
fout<<"\n";
return 0;
}