Pagini recente » Cod sursa (job #2373493) | Rating Barbalata Denis (z1nk3) | Cod sursa (job #741313) | Cod sursa (job #910572) | Cod sursa (job #276233)
Cod sursa(job #276233)
#include<stdio.h>
#include<algorithm>
#define NMAX 100111
using namespace std;
int p,u,lg,lgmax,i,n,m[NMAX],v[NMAX],t[NMAX];
FILE *g = fopen("scmax.out","w");
int binar(int x){
int mij;
p = 1, u = lgmax;
while( p <= u){
mij = (p + u) >> 1;
if( v[m[mij]] >= x )
u = mij - 1;
else
p = mij + 1;
}
return u;
}
void reconst(int x){
if(!t[x])
fprintf(g,"%d ",v[x]);
else{
reconst(t[x]);
fprintf(g,"%d ",v[x]);
}
}
int main(){
FILE *f = fopen("scmax.in","r");
fscanf(f,"%d",&n);
for(i=1; i<=n; i++)
fscanf(f,"%d",&v[i]);
for(i=1; i<=n; i++){
lg = binar(v[i]) + 1;
if(!m[lg] || v[m[lg]] > v[i])
m[lg] = i;
t[i] = m[lg - 1];
lgmax = max(lgmax, lg);
}
fprintf(g,"%d\n",lgmax);
reconst( m[lgmax] );
fclose(f);
fclose(g);
return 0;
}