Pagini recente » Cod sursa (job #161852) | Cod sursa (job #1683500) | Cod sursa (job #308766) | Cod sursa (job #821457) | Cod sursa (job #1525949)
#include <fstream>
using namespace std;
const int NMAX=100001;
int i, j, n, nr, s, pos, d[NMAX], v[NMAX], x[NMAX], ln[NMAX];
ifstream in("scmax.in");
ofstream out("scmax.out");
void write(int i)
{
if(x[i]>0)write(x[i]);
out<<v[i]<<' ';
}
int bs(int x)
{
int l, r, mid;
l=0;
r=nr;
mid=(l+r)/2;
while(l<=r)
{
if(v[ln[mid]]<x&&v[ln[mid+1]]>=x)
return mid;
else if(v[ln[mid+1]]<x)
{
l=mid+1;
mid=(l+r)/2;
}
else
{
r=mid-1;
mid=(l+r)/2;
}
}
return nr;
}
int main()
{
in>>n;
nr=1;
for(i=1; i<=n; i++)
in>>v[i];
d[1]=ln[1]=1;
ln[0]=0;
for(i=2; i<=n; i++)
{
pos=bs(v[i]);
x[i]=ln[pos];
d[i]=pos+1;
ln[pos+1]=i;
if(nr<pos+1)
nr=pos+1;
}
int maxim=0;
pos=0;
for(i=1; i<=n; i++)
if(maxim<d[i])
{
maxim=d[i];
pos=i;
}
out<<maxim<<'\n';
write(pos);
return 0;
}