Pagini recente » Cod sursa (job #2983710) | Cod sursa (job #2424651) | Cod sursa (job #1084602) | Cod sursa (job #3005114) | Cod sursa (job #483665)
Cod sursa(job #483665)
#include <stdio.h>
long min,q[100100],p[100100],v[100100];
FILE *f,*g;
void rec(long pos,long x)
{
if (x>=0) {
while (p[pos]!=x) {pos--; }
x--;
rec(pos,x);
fprintf(g,"%ld ",v[pos]);
}
}
void caut(long i, long j, long x)
{
if (i<=j) {
long m=(i+j) /2;
if (q[m]>=x && m<min) {
min=m;
caut(i,m-1,x);
}
else
caut(m+1,j,x);
}
}
int main() {
long n,i,con;
f=fopen("scmax.in","r");
g=fopen("scmax.out","w");
fscanf(f,"%ld",&n);
con=-1;
for (i=0;i<=n-1;i++) {
fscanf(f,"%ld",&v[i]);
if (con==-1) {con=0; q[0]=v[i]; p[i]=0;}
else {
if (v[i]>q[con]) {con++; q[con]=v[i]; p[i]=con; }
else {
min=con;
caut (0,con,v[i]);
p[i]=min;
q[min]=v[i];
}
}
}
fprintf(g,"%ld\n",con+1);
rec(n,con);
fclose(g);
return 0;
}