# Runtime Error(SIGSEGV) in count of maximum

#include<stdio.h>
int main(void)
{
int i,t,m,max,j,N;
scanf("%d",&t);
while(t–)
{ int b[1000]={0};
j=0;
max=0;
scanf("%d",&N);
for(i=0;i<N;i++)
{
scanf("%d",&m);
b[m]+=1;
}

``````  for(i=0;i<=1001;i++)
{
//printf("%d\t",b[i]);
if(max<b[i])
{

max=b[i];
j=i;

}
}
printf("%d %d\n",j,max);
``````

}
return 0;
}
You may also view the solution at the link below:
http://www.codechef.com/viewsolution/6068287
Thanx for your support

Your approach is correct (there are other solutions strategies also ). But you are not taking care of the constraints values.

1 <= T <= 100, 1 <= N <= 100

and for all i in [1…N] : 1 <= A[i] <= 10000

The values of T and N are handled correctly but A[i] can have maximum value of 10000.

Your array b is suffering from array index out of bounds runtime error for i >=1000, you need to make the below mentioned adjustments for all i in [1…N] : 1 <= A[i] <= 10000.

#include"stdio.h"
int main(void) {

``````int i,t,m,max,j,N;
scanf("%d",&t);
while(t--)
{
int b[10001]={0};   //change here, increase the size of the array
j=0;
max=0;
scanf("%d",&N);
for(i=0;i<N;i++)
{
scanf("%d",&m);
b[m]+=1;
}

for(i=0;i<10001;i++)    //change here, as the size is increased you need to adjust the loop accordingly
{
//printf("%d\t",b[i]);
if(max<b[i])
{
max=b[i];
j=i;
}
}
printf("%d %d\n",j,b[j]);
}
return 0;
``````

}

Your approach with these modification is accepted, see it here.

P.S. : Your approach can be modified to require less memory ( you are allocating array size of 10001).

Thanks.
A silly mistake of mine!!