Pagini recente » Cod sursa (job #337411) | Cod sursa (job #2362700) | Cod sursa (job #2989754) | Cod sursa (job #1342418) | Cod sursa (job #1276318)
#include <fstream>
#include <cmath>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=100001;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int v[N],pd[N],nex[N];
inline void integrare(int k)
{
int st=1,dr=pd[0],mij;
while(st<=dr)
{
mij=(st+dr)/2;
if(pd[mij]>=k&&pd[mij-1]<k)
{
pd[mij]=k;
nex[k]=pd[mij-1];
return ;
}
else if(pd[mij]>k) dr=mij-1;
else if(pd[mij]<k) st=mij+1;
}
}
inline void stabilire(int k)
{
if(k<pd[pd[0]]) integrare(k);
else if(k>pd[pd[0]])
{
pd[++pd[0]]=k;
nex[pd[0]]=pd[pd[0]-1];
}
}
int main()
{
int n,i;
memset(pd,0x3f3f3f3f,sizeof(pd));
fin>>n;
for(i=1;i<=n;i++) fin>>v[i];
pd[1]=v[1];
pd[0]=1;
for(i=2;i<=n;i++)
{
stabilire(v[i]);
}
fout<<pd[0]<<"\n";
v[pd[0]]=pd[pd[0]];
for(i=pd[0];i>=2;i--) v[i-1]=nex[i];
for(i=1;i<=pd[0];i++) fout<<v[i]<<" ";
}