Pagini recente » Cod sursa (job #1488766) | Cod sursa (job #2261690) | Cod sursa (job #439721) | Cod sursa (job #1257360) | Cod sursa (job #2161336)
#include <fstream>
#define nmax 100002
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int lg[nmax],v[nmax],pred[nmax],lm;
int poz(int val)
{
int q,pos;
for(q=1;q<=lm;q<<=1);
for(pos=0;q;q>>=1)
if(pos+q<=lm&&v[lg[pos+q]]<val)
pos+=q;
return pos;
}
void afis(int x)
{
if(pred[x])
{
afis(pred[x]);
}
fout<<v[x]<<" ";
}
int main()
{
int n;
fin>>n;
for(int i=1;i<=n;i++)
fin>>v[i];
lg[1]=1;
v[0]=20000002;
for(int i=1;i<=n;i++)
{
int po=poz(v[i]);
lm=max(lm,po+1);
lg[po+1]=i;
pred[i]=lg[po];
}
fout<<lm<<"\n";
afis(lg[lm]);
return 0;
}