Cod sursa(job #1650841)

Utilizator ErikHEErik Henning ErikHE Data 11 martie 2016 20:51:13
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,v[100005],pos[100005],m[100005],prec[100005],lmax,pmax,nsol,sol[100005];

int main()
{
    int i,ans;
    f>>n;
    for(i=1;i<=n;i++)
     f>>v[i];

    pos[1]=1; m[1]=v[1]; prec[1]=0; lmax=1; pmax=1;

    for(i=2;i<=n;i++)
    {
      ans=lower_bound(m+1,m+lmax+1,v[i])-m;

      pos[ans]=i; m[ans]=v[i]; prec[i]=pos[ans-1];

      if (ans>lmax) {lmax=ans; pmax=i;}
    }

    while(pmax)
    { nsol++; sol[nsol]=v[pmax];
      pmax=prec[pmax];
    }

     g<<nsol<<"\n";
    for(i=nsol;i>=1;i--)
     g<<sol[i]<<" ";

    return 0;
}