| 
41561
 | 
     1  | 
-------------------------------------------------------------------------------
  | 
| 
 | 
     2  | 
-- Longest increasing subsequence of an array of integers
  | 
| 
 | 
     3  | 
-------------------------------------------------------------------------------
  | 
| 
 | 
     4  | 
  | 
| 
 | 
     5  | 
package Liseq is
  | 
| 
 | 
     6  | 
  | 
| 
 | 
     7  | 
   type Vector is array (Integer range <>) of Integer;
  | 
| 
 | 
     8  | 
  | 
| 
 | 
     9  | 
   --# function Liseq_prfx(A: Vector; i: Integer) return Integer;
  | 
| 
 | 
    10  | 
   --# function Liseq_ends_at(A: Vector; i: Integer) return Integer;
  | 
| 
 | 
    11  | 
   --# function Max_ext(A: Vector; i, j: Integer) return Integer;
  | 
| 
 | 
    12  | 
  | 
| 
 | 
    13  | 
   procedure Liseq_length(A: in Vector; L: in out Vector; maxi: out Integer);
  | 
| 
 | 
    14  | 
   --# derives maxi, L from A, L;
  | 
| 
 | 
    15  | 
   --# pre A'First = 0 and L'First = 0 and A'Last = L'Last and A'Last < Integer'Last;
  | 
| 
 | 
    16  | 
   --# post maxi = Liseq_prfx (A, A'Last+1);
  | 
| 
 | 
    17  | 
  | 
| 
 | 
    18  | 
end Liseq;
  |