function [xmax lsize] = maxlist(x, L, L_max, mode) P = 1E24; u = zeros(L, 1); p = zeros(L, 1); u_last = zeros(L, 1); p_last = zeros(L, 1); OFF = 1; u_last(1 + OFF) = P; u_last(0 + OFF) = 0; p_last(0 + OFF) = 0 + OFF; N = 0 + OFF; x = mode*x; for k=1:lge(x), if (p_last(N) == (L + OFF)) m = 0; u_last(N) = P; else m = 1; end N = min(L_max, N + m); ii = 0; while x(k) >= u_last(ii+1+OFF) ii = ii + 1; end N = N - ii; for jj=(1 + OFF):(N -1) u(jj+1) = u_last(jj+ii); p(jj+1) = p_last(jj+ii) + 1; end u(N+1) = P; p(N+1) = 0; u(1 + OFF) = x(k); p(1 + OFF) = 1 + OFF; xmax(k) = mode*u(N); pmax = p(N); lsize(k) = find(u == P, 1); u_last(1:lsize(k)) = u(1:lsize(k)); p_last(1:lsize(k)) = p(1:lsize(k)); end;