Pagini recente » Cod sursa (job #1286775) | Cod sursa (job #1383615) | Cod sursa (job #1660613) | Cod sursa (job #1659524) | Cod sursa (job #2072757)
#include <fstream>
#define nmax 100002
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int v[nmax],lg[nmax],pred[nmax],lm,n;
inline int cd_poz(int val)
{
int pos,q;
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 afisare(int x)
{
if(pred[x])
{
afisare(pred[x]);
}
fout<<v[x]<<" ";
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>v[i];
}
lg[1]=1;
v[0]=2000000002;
for(int i=1;i<=n;i++)
{
int po=cd_poz(v[i]);
lm=max(lm,po+1);
lg[po+1]=i;
pred[i]=lg[po];
}
fout<<lm<<"\n";
afisare(lg[lm]);
return 0;
}