Naruszasz zakres przy RAND_MAX. Jeżeli chcesz uzyskać z większego zakresu, zainteresuj się biblioteką random.
cin>>a;
int tab[a];
Tablica musi mieć rozmiar statyczny, chyba że tworzysz tablicę dynamiczną:
cin >> a;
int * tab = new int[a];
Swoją drogą, najlepiej byłoby inaczej nazwać te zmienne, a także dodatkowo dodać słowo unsigned do typu całkowitego liczb. Ani jedna, ani druga nazwa nic nie mówią:
unsigned int n;
cin >> n;
int * arr = new int[n];