He estado haciendo pruebas con el gdb para ver donde se iba y en el numero 113383 se va de madre...da la vuelta a la variable y casca. Y el caso es que no parece que haga nada mal...
Editado:
Consegui que funcionase desde 1-1000000 mediante un chanchullo (cuando es impar que haga ya de paso la division por 2, por que el resultado sera par):
while (tmp!=1)
{
if (!(tmp&1))
{
tmp=tmp>>1;
cont++;
}
else
{
tmp=((tmp*3)+1)>>1;
cont +=2;
}
}
En mi pc he probado con el time de linux y tarda 2,2 segundos en realizar la prueba para el intervalo 1-1000000, pero el juez de acm uva me tira por time limit...habra que seguir optimizando...

Un saludo!
Anacoreta
Editado: Con estos cambios y alguna minucia m?s consegui que me lo aceptaran, gracias al jefe!!