Pagini recente » Cod sursa (job #1189283) | Cod sursa (job #2077731) | Cod sursa (job #2153928) | Cod sursa (job #14588) | Cod sursa (job #1864405)
#include <iostream>
#define nmax 100001
#include <fstream>
using namespace std;
int v[nmax],n,q[nmax],p[nmax],k,poz;
ifstream f("scmax.in");
ofstream g("scmax.out");
inline int bs(int x)
{
static int l=0,r=k,m=(l+r)/2;
while(l<=r)
{
if(q[m]<=x && x<q[m+1]) return m+1;
else if(x>=q[m+1]) l=m+1,m=(l+r)/2;
else r=m-1,m=(l+r)/2;
}
return k+1;
}
int main()
{
f>>n;
for(int i=1; i<=n; i++) f>>v[i];
q[1]=v[1];
p[1]=1;
k=1;
for(int i=2; i<=n; i++)
{ poz=bs(v[i]);
q[poz]=v[i];p[i]=poz;
if (k < poz) k =poz;
}
int nr=k;
for(int i=2;i<=k;i++) if(q[i]!=q[i-1]) ;
else nr--;
g<<nr<<'\n';
g<<q[1]<<' ';
for(int i=2;i<=k;i++) if(q[i]!=q[i-1]) g<<q[i]<<' ';
}