@mariusz193 napisał, co powinieneś zrobić [poczytać podręcznik, literaturę]
Np:
dla N = 10
tab1 = new int[N];
tab1 jest indeksowana od zera, więc zawiera:
tab1[0],
tab1[1],
tab1[2],
tab1[3],
tab1[4],
tab1[5],
tab1[6],
tab1[7],
tab1[8],
tab1[9],
Skoro tak, to [poprawna] pętla też powinna "startować" od zera:
for (int i = 0; i < N; ++i){
.....
PS
Inna sprawa, że jak sam się przekonałeś i o czym też wspomniał @mariusz193 i wiele/kilka innych osób [w tym wątku], tablica/e są tu niepotrzebna/e ale z tablicami też można, ale należy się z nimi "zaprzyjaźnić" i nauczyć się z nimi "żyć".
PS 2
Błąd - niewielkie przekroczenie indeksu, [do tego dla bardzo małej tablicy] często nie spowoduje żadnego błędu i dlatego u Ciebie, przy normalnej kompilacji, wszystko wygląda ok, a w wynikowym programie indeksy nie są sprawdzane na przekroczenie zakresu. Na SPOJu jednak kompilacja nie jest "normalna" i dodawane jest [odpowiednia biblioteka] bardzo dokładne.sprawdzanie, czy nie wystąpiło przekroczenie indeksu.
PS 3
Dokładnie ten sam, wyżej opisany, problem występuje w obu waszych programach @grg1 i @mariusz_95