Cod sursa(job #1243871)

Utilizator delia_99Delia Draghici delia_99 Data 16 octombrie 2014 15:40:37
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>

using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,a[100005],poz[100005],p,q[100005],i,y,b[100005],c,nr;

void cauta(int &val, int x,int i)
{
    int st,dr,mij;
    st=1;
    dr=val;
    while(st<=dr)
    {

        mij=(st+dr)>>1;
        if(q[mij]==x)

          {poz[i]=mij;

           return ;}
        else
        {
            if(q[mij]>x)
                dr=mij-1;
            else st=mij+1;
        }
    }
    if(st>val)
            val=st;
        q[st]=a[i];
        poz[i]=st;
    return ;



}


int main()
{
    f>>n;
    p=1;
    f>>a[1];
    q[1]=a[1];
    poz[1]=1;
    for(i=2; i<=n; ++i)
    {
        f>>a[i];
        cauta(p,a[i],i);



    }
    g<<p<<'\n';
    for(i=1;i<=n;++i)
      if(poz[i]==p)
        {y=i;break;}
    c=1;
    nr=p-1;
    b[1]=a[y];

    while(nr>0)
    {
        for(i=y-1;i>=1;--i)
          if(a[i]<a[y]&&nr==poz[i])
            {b[++c]=a[i];
            y=i;
            nr--;
            break;}

    }
    for(i=c;i>=1;--i)
      g<<b[i]<<" ";
    g<<'\n';





    return 0;
}