Cod sursa(job #1292454)

Utilizator DavidDragulinDragulin David DavidDragulin Data 14 decembrie 2014 13:10:11
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>

using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int a[100004],v[100004],d[100004],i,maxim,n,st,dr,poz,mij;
int dreapta;

void rec(int i, int maxim)
{
    if (maxim == 0) return;

    while( !(a[i]<dreapta && d[i] == maxim ))
        i--;
    dreapta = a[i];
    rec(i-1,maxim-1);
    fout<<a[i]<<" ";

}
int main()
{
    fin>>n;
    maxim=1;
    for(i=1;i<=n;i++)fin>>a[i];
    v[1]=a[1];
    d[1]=1;
    for(i=2;i<=n;i++)
    {
     st=1;
     dr=maxim;
     while(st<=dr)
     {
         mij=(st+dr)/2;
         if(v[mij]<a[i])
         {
             poz=mij;
             st=mij+1;
         }
         else dr=mij-1;
     }

          poz++;
          d[i]=poz;
          v[poz]=a[i];
          if(maxim<d[i])maxim=d[i];
          poz=0;

    }


    fout<<maxim<<'\n';
    dreapta = 2000000001;
    rec(n,maxim);
    return 0;
}