Cod sursa(job #483667)

Utilizator costyv87Vlad Costin costyv87 Data 9 septembrie 2010 17:00:51
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <stdio.h>
long min,q[100100],p[100100],v[100100];
      FILE *f,*g;
void rec(long pos,long x,long y)
{
    if (x>=0) {
while (p[pos]!=x  ) {pos--; }
x--;
rec(pos,x,v[pos]);
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-1,con,2000000001);

fclose(g);
return 0;
}