diff --git a/chapterSearch.tex b/chapterSearch.tex index ca2faf2..6f156b6 100644 --- a/chapterSearch.tex +++ b/chapterSearch.tex @@ -129,20 +129,22 @@ \subsection{Extreme-value problems}\label{extremeValueProblem} def LIS(self, A): n = len(A) MIN = [-1 for _ in xrange(n+1)] - - l = 1 - for i in xrange(1, n): - if A[i] > A[MIN[l]]: - l += 1 - MIN[l] = i - else: - j = self.bin_search(MIN, A, A[i], 1, l+1) - MIN[j] = i - - return l + k = 1 + MIN[k] = A[0] # store value + for v in A[1:]: + idx = bisect.bisect_left(MIN, v, 1, k+1) + MIN[idx] = v + k += 1 if idx == k+1 else 0 + + return k \end{python} If need to return the LIS itself. \begin{python} + n = len(A) + MIN = [-1 for _ in xrange(n+1)] + RET = [-1 for _ in xrange(n)] + l = 1 + MIN[l] = 0 # store index for i in xrange(1, n): if A[i] > A[MIN[l]]: l += 1 diff --git a/chapterTree.tex b/chapterTree.tex index 7c88c4c..1bca6a9 100644 --- a/chapterTree.tex +++ b/chapterTree.tex @@ -136,7 +136,7 @@ \subsection{Basic Operations} Rightmost node can be similarly found. -\runinhead{Diameter of a tree.} The diameter of a tree $\equiv$ longest path in the tree. +\runinhead{Diameter of a tree (graph).} The diameter of a tree $\equiv$ longest path in the tree. Core clues: \begin{enumerate}