Pagini recente » Cod sursa (job #10564) | Cod sursa (job #41884) | 02local11 | Cod sursa (job #531937) | Cod sursa (job #314927)
Cod sursa(job #314927)
#include <stdio.h>
#define MID ((li+ls)/2)
//ifstream in("scmax.in");
//ofstream out("scmax.out");
FILE *in,*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;
if(k[k[0]]<val)
return 0;
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;
in = fopen("scmax.in","r");
out = fopen("scmax.out","w");
fscanf(in,"%ld",&n);
for(i=1; i<=n; i++)
{
// in>>x[i];
fscanf(in,"%ld",&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';
fprintf(out,"%ld\n",a[max]);
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]<<' ';
fprintf(out,"%ld ",k[i]);
return 0;
}