Cod sursa(job #548633)

Utilizator irene_mFMI Irina Iancu irene_m Data 7 martie 2011 17:40:38
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <cstdio>
#define infile "scmax.in"
#define outfile "scmax.out"
#define MaxN 100005
#define maxim(a,b) a>b?a:b


int v[MaxN],x[MaxN],t[MaxN],N,max;

void read()
{
      int i;
      scanf("%d",&N);
      for(i=1;i<=N;i++)
            scanf("%d",&v[i]);
}

int cauta(int poz)
{
      int i,l=0;
      for(i=1<<17;i>0;i/=2)
            if(l+i<=max && v[x[l+i]]<v[poz])
                  l+=i;
      return l;
}

void solve()
{
      int i,l;
      for(i=1;i<=N;i++)
      {
            l=cauta(i);
            x[l+1]=i;
            max=maxim(max,l+1);
            t[i]=x[l];
      }
}

void write(int poz)
{
      if(poz>0)
      {
            write(t[poz]);
            printf("%d ",v[poz]);
      }
}

int main()
{
      freopen(infile,"r",stdin);
      freopen(outfile,"w",stdout);

      read();
      solve();
      printf("%d\n",max);
      write(x[max]);

      fclose(stdin);
      fclose(stdout);
      return 0;
}