Problema com int e long

olá pessoal!
estou fazendo um trabalho, e escrevi a seguinte linha: int indiceAtual = (int)(lista[i]*lista.length/(k+1));
onde:
i <= 50000
a lista tem tamanho 50000
k <= 50000

acontece que dependendo dos valores, alguns resultados dão negativos, sendo que é impossivel tal conta dá negativa.
imaginei que fosse porque eu usei int, tentei usar long, e até double, mas continuou dando negativos

alguem pode me explicar direitinho? eu preciso de numeros inteiros. que é pra eles serem posições de um vetor.

obrigado pessoal!

O valor de lista[i] nunca é negativo? Tem certeza?

Põe um breakpoint na linha do código e inspeciona o valor das variáveis!

lista[i]*lista.length

Gostaria de saber:
O tipo de lista[]
Se lista[] for int[] e um dos elementos for maior que 2147483647 / 50000 = 42949, o resultado será um valor que excederá o maior inteiro positivo (2147483647) e aparece como um número negativo.
O correto, nesse caso, é fazer as contas ou assim:

(int) ((long) lista[i]) * lista.length / (k + 1)

ou então assim:

(int) (((double) lista[i]) * lista.length / (k + 1))