anchor.diff:              let k = predList.[k]
               buildRes k (index-1)
       buildRes (smallestList.[l]) l
  -// // let result = numbers |> solve2
  -let length = list.Length
  -// printfn "%A" result
  +
  +
   #time
  -// 1974+let (predList, smallestList, l) =
  +    numbers
  +    |> Array.ofList
  +    |> solve
  +
  +printfn "Result: %i" l
  +#time
  
positive.code: 
      internalSolve 0 0 predList smallestList input
  
  let example = [1; 1; 7; 5; 8; 9; 12; 11; 11; 13; 13; 12; 2; 3; 4; 4; 5; 6; 7; 8; 9; 10; 11; 12]
  let exampleBest = [1; 1; 5; 4; 7; 8]
  
  
  #time
  let (predList, smallestList, l) =
      numbers
      |> Array.ofList
      |> solve3
  let list =
      let res = Array.init l id
      let rec buildRes k index =
          if index = 0 then res
  
negative.code:             internalSolve acc rest 
      internalSolve [] input |> List.maxBy fst |> fst
  
  // implementing this https://en.wikipedia.org/wiki/Longest_increasing_subsequence
  let solve (input: int []) =
      let rec findLow currentIndex low high (input: int []) (smallestList: int []) =
          if low > high then low
          else
              let mid = ceil (float(low + high)/2.) |> int
              let (low, high) = 
                  if input.[smallestList.[mid]] <= input.[currentIndex] 
                  then (mid+1, high) 
                  else (low, mid-1)
              findLow currentIndex low high input smallestList
  