Cod sursa(job #2161837)

Utilizator Anastasia11Susciuc Anastasia Anastasia11 Data 11 martie 2018 21:13:20
Problema Subsir crescator maximal Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>

using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");
int v[100003],t[100003],d[100003],sol[10003],n,i,j,st,dr,k,mj;
void read()
{
  f >> n ;
    for ( int i = 1 ; i <= n ;i ++ )
     f >> v[i];
}
void sclm()
{
    k = 1;
    d[1] = 1 ;
   for( i = 2 ; i <= n ; i ++ )
    {st=1;
     dr=k;
      while( st <= dr )
       {
           mj = (st+dr)/2 ;
         if ( v[d[mj]] < v[i] )
          st = mj+1;
         else
           dr = mj-1;
       }
   if ( st > k )
     k ++ ;
   d[st] = i ;
   t[i] = d[st-1] ;
   }
    g << k << '\n' ;
}
void print()
{
    int i = d[k] ;
   while ( i != 0 )
   {
       sol [++j] = i ;
       i=t[i];
   }
   for ( i = k ; i >= 1 ; i -- )
      g << sol[i] << " " ;
}
int main()
{
    read();
    sclm();
    print();
   return 0;
}