Pagini recente » Cod sursa (job #2225237) | Cod sursa (job #2616951) | Cod sursa (job #1785431) | Cod sursa (job #2542579) | Cod sursa (job #314923)
Cod sursa(job #314923)
#include <fstream.h>
#define MID ((li+ls)/2)
ifstream in("scmax.in");
ofstream out("scmax.out");
long a[100005],i,n,k[100005],j,li,ls,q,x[100005],max;
long bin(long val)
{
li=1;
ls=k[0];
if(k[1]>val)
return 1;
while(li<=ls)
{
if(k[MID] < val && k[MID+1]>=val)
return MID+1;
if(k[MID] < val)
li=MID+1;
else if(k[MID]>val)
ls=MID-1;
}
return 0;
}
int main()
{
in>>n;
for(i=1; i<=n; i++)
{
in>>x[i];
q = bin(x[i]);
if(!q)
{
k[++k[0]]=x[i];
a[i]=k[0];
}
else
{
k[q]=x[i];
a[i]=q;
}
if(a[i] > a[max])
max=i;
}
//for(i=1; i<=n; i++)
// out<<a[i]<<' '
//
;
//out<<'\n';
out<<a[max]<<'\n';
k[0]=1;
k[1]=x[max];
for(i=max-1; a[max]-1 && i>=1; i--)
if(a[i]==a[max]-1 && x[i]<x[max])
{
k[++k[0]] = x[i];
max=i;
}
for(i=k[0]; i>=1; i--)
out<<k[i]<<' ';
return 0;
}