Salut,
Uitandu-ma peste solutia recomandata de 100pct, am observat urmatorul lucru:
#define MAX_N 1000001
...
int contor[MAX_N],viz[MAX_N];
...
memset(contor,0,MAX_N);
memset(viz,0,MAX_N);
1. al 3-lea argument al lui memset primeste un numar de bytes nu de elemente. In acest caz sizeof(int) * MAX_N ar fi fost corect. Altfel se intializeaza doar o parte din vector.
2. MAX_N e de 10 ori mai mare decat dimensiunea maxima a inputului, ceea ce inseamna ca desi memset-ul primeste argumentul gresit, totusi initializeaza o bucata suficient de mare din array incat sa functioneze pentru problema asta, sizeof(int) fiind cel mai probabil 4.