Se é o tamanho de bits dos números inteiros, é possível calcular o tempo máximo em .kO(nk)
Basicamente, o problema é que, dados , bits inteiros , localizem modo que seja máximo.nkSii,jSi⊕Sj
Você trata cada como uma sequência binária (observando a representação binária) e cria um teste com essas seqüências. Isso leva tempo .SiO(nk)
Agora, para cada , você está tentando percorrer o complemento de na você criou (tomando basicamente a melhor ramificação em cada etapa), encontrando um tal que seja o máximo.SjSjj′Sj⊕Sj′
Faça isso para cada , e você encontrará a resposta no tempo .jO(nk)
Como seus números inteiros são limitados, esse algoritmo para max é basicamente linear, assim como o algoritmo para min obtido pela classificação (como a classificação pode ser feita em tempo linear).
Aliás, se não houvesse limites, você poderá reduzir a distinção do elemento para a versão mínima.