Pagini recente » Cod sursa (job #2922746) | Cod sursa (job #2186772) | Cod sursa (job #1299599) | Cod sursa (job #1388990) | Cod sursa (job #1277506)
#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];
inline void integrare(int k,int &nr)
{
int st=2,dr=nr,mij;
while(st<=dr)
{
mij=(st+dr)/2;
if(pd[mij]>=k&&pd[mij-1]<k)
{
pd[mij]=k;
return ;
}
else if(pd[mij]>k) dr=mij-1;
else if(pd[mij]<k) st=mij+1;
}
}
inline void stabilire(int k,int &nr)
{ if(k<pd[1]) pd[1]=k;
else if(k<pd[nr]) integrare(k,nr);
else if(k>pd[nr])
{
pd[++nr]=k;
}
}
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];
int nr=1;
for(i=2;i<=n;i++)
{
stabilire(v[i],nr);
}
fout<<nr<<"\n";
for(i=1;i<=nr;i++) fout<<pd[i]<<" ";
}