I typed all this before I saw the other answer so might as well post it I guess.
int can store values in the range from -2^31 to +2^31, including -2^31 but not including +2^31. 2^31 is more than 2*10^9 (exact value 2147483648). int and long int and long are all identical. long long int and long long can store from -2^63 to +2^63. 2^63 is around 9*10^18 (exact value 9223372036854775808).
Your problem is probably overflow during multiplication. Suppose you have int a = 10^5, b = 10^5. In this case is a*b 10^10, which is more than the limit for int, so you have to use long long. It doesn’t even work if you do long long t = a*b; This is because the value a*b is an int even if t is long long. a and b both need to be long long as well. Finally, t = 100000*10000; will fail as well because 100000 is an int, not a long long. If you want it to be a long long, you should type 100000LL. i.e. long long t = 100000LL*100000LL
Edit: Turbo C++ has the limit as 32768. You might be looking at an outdated source.
You can make sure an array is initialized by assigning {0}
e.g. int a[10000] = {0};
edit: codechef formatting is really annoying