Pagini recente » Cod sursa (job #2726861) | Cod sursa (job #1973576) | Cod sursa (job #2439385) | Cod sursa (job #1350619) | Cod sursa (job #904355)
Cod sursa(job #904355)
#include <cstdio>
#define NMax 100002
using namespace std;
long n,v[NMax],m[NMax],x,j,fmaxx,p[NMax];
int bsearch(long in,long fn,long A[],long val) {
long mid,p=fn;
if(val<v[A[in]])
return 0;
while(in<=fn) {
mid=(fn-in)/2+in;
if(v[A[mid]]<val) {
p=mid;
in=mid+1;
}
else
fn=mid-1;
}
return p;
}
void print(long poz) {
if(poz==0)
return ;
print(p[poz]);
printf("%ld ",v[poz]);
}
int main()
{
freopen("scmax.in","rt",stdin);
freopen("scmax.out","wt",stdout);
scanf("%ld",&n);
for(long i=1;i<=n;i++)
scanf("%ld",&v[i]);
for(long i=1;i<=n;i++) {
x=v[i];
j=bsearch(1,fmaxx,m,x);
if(x<v[m[j+1]]||m[j+1]==0) {
p[i]=m[j];
m[j+1]=i;
fmaxx = j+1>fmaxx ? j+1 : fmaxx;
}
}
printf("%ld\n",fmaxx);
print(m[fmaxx]);
printf("\n");
return 0;
}