Cod sursa(job #886674)

Utilizator ionut_ungureanuUngureanu Vladut Ionut ionut_ungureanu Data 23 februarie 2013 09:45:11
Problema Subsir crescator maximal Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <cstdio>
#define FIN "scmax.in","r",stdin
#define FOUT "scmax.out","w",stdout

using namespace std;

int n,i,pos,lg,j;
int a[100001],bst[100001],poz[100001];

int search(int x)
{
    int p=1,u=lg,m;
    while(p<=u)
    {
        m=(p+u)/2;
        if(bst[m]>=x && bst[m-1]<=x)return m;
        if(bst[m-1]<x)p=m+1;
        else u=m-1;
    }
    return ++lg;
}


int main()
{
    freopen(FIN);
    freopen(FOUT);
    scanf("%d",&n);
    for(i=1;i<=n;i++){scanf("%d",&a[i]);bst[i]=2000000000;}

    for(i=1;i<=n;i++)
    {
        pos=search(a[i]);
        bst[pos]=a[i];
        poz[i]=pos;
    }
printf("%d\n",lg);

  for(i=1;i<=lg;i++)
  {
      for(j=n;j>=1;j--)
        if(poz[j]==i)
        {

            printf("%d ",a[j]);
            break;
        }
  }

    return 0;
}