Cod sursa(job #2760474)

Utilizator ravixBobei Razvan-Marian ravix Data 26 iunie 2021 20:18:49
Problema Subsir crescator maximal Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>

using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");

long v[100005] , N , a[100005] , k;

long QuickSearch(long i , long j , long number) {

   if(i <= j) {
      long mid = (i+j)/2 ;
      if((a[mid] < number && (a[mid+1] > number || a[mid+1]==0)))
         return mid ;
      else
      if(a[mid] > number)
         return QuickSearch(i,mid-1,number);
      else
         return QuickSearch(mid+1,j,number);

   }
   return -1 ;
}
int main()
{  fin >> N ;
   for(long i = 1 ; i <= N ; i++)
       fin >> v[i];
   a[1] = v[1] ;
   k = 1 ;
   for(long i = 2 ; i <= N ; i++) {
       long p = QuickSearch(1,k,v[i]) ;
       if(p > 0) {
          if(a[p+1] == 0)
             a[p+1] = v[i];
          else
             a[p+1] = min(a[p+1],v[i]);
          if(p+1 > k)
             k = p + 1;
       }
       else
          a[1] = min(a[1],v[i]) ;
   }
   fout << k ;

    return 0;
}