\begin{algorithm} \caption{Linear Time Maximum Subarray} \begin{algorithmic} \INPUT An array $A[1..n]$ . \OUTPUT A tuple $(p, q, s)$ representing the maximun subarray of $A$ and its summation. \STATE $p = 1, q = 1, s = A[1]$ \STATE \COMMENT{$A[p..q]$ is the maximum subarray and s is its summation} \STATE $i = 1, tmp = A[1]$ \STATE \COMMENT{tmp is the summation of $A[i..j-1]$} \FOR{$j = 2$ \TO $n$} \IF{$tmp < 0$} \STATE $i = j$ \STATE $tmp = A[j]$ \ELSE \STATE $tmp = tmp + A[j]$ \ENDIF \IF{$tmp > s$} \STATE $p = i, q = j, s = tmp$ \ENDIF \ENDFOR \RETURN $(p, q, r)$ \end{algorithmic} \end{algorithm}