段错误,求大家看看,能不能解决

在玩了一段时间字符串后,小t对字符串失去了兴趣,于是他将这个字符串送给了syx,不过在送给syx之前,小t还要问syx一些问题,聪明的你快来帮syx解答吧!

已知小t总共有q次询问,对于小t的每次询问,他都会给你一个区间,你需要回答他在这个区间中出现最多的字母是谁,如果有两个及以上的字母都是出现最多的,则输出字典序小的那个(该字符串仅包含小写拉丁字母
代码出现了段错误,但自己发现不了,不知道哪有问题
#include
#include
#include

char a[30001];
int x[30001];
char a1[260]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};

int main(void)
{
int n,q,l,r,ii,i,j,i1;
memset(x,0,sizeof(x));

scanf("%d %d",&n,&q);
scanf("%s",a);

//printf("%c",a1[25]);
for(ii=0;ii0,sizeof(x));
    scanf("%d %d",&l,&r);
    for(i=l-1;i<=r-1;i++)
    {
        if(a[i]=='a')
        {
            x[0]++;
            
        }
        if(a[i]=='b')
        {
            x[1]++;
        }
        if(a[i]=='c')
        {
            x[2]++;
        }
        if(a[i]=='d')
        {
            x[3]++;
        }
        if(a[i]=='e')
        {
            x[4]++;
        }
        if(a[i]=='f')
        {
            x[5]++;
        }
        if(a[i]=='g')
        {
            x[6]++;
        }
        if(a[i]=='h')
        {
            x[7]++;
        }
        if(a[i]=='i')
        {
            x[8]++;
        }
        if(a[i]=='j')
        {
            x[9]++;
        }
        if(a[i]=='k')
        {
            x[10]++;
        }
        if(a[i]=='l')
        {
            x[11]++;
        }
        if(a[i]=='m')
        {
            x[12]++;
        }
        if(a[i]=='n')
        {
            x[13]++;
        }
        if(a[i]=='o')
        {
            x[14]++;
        }
        if(a[i]=='p')
        {
            x[15]++;
        }
        if(a[i]=='q')
        {
            x[16]++;
        }
        if(a[i]=='r')
        {
            x[17]++;
        }
            if(a[i]=='s')
        {
            x[18]++;
        }
            if(a[i]=='t')
        {
            x[19]++;
        }
            if(a[i]=='u')
        {
            x[20]++;
        }
            if(a[i]=='v')
        {
            x[21]++;
        }
            if(a[i]=='w')
        {
            x[22]++;
        }
            if(a[i]=='x')
        {
            x[23]++;
        }
            if(a[i]=='y')
        {
            x[24]++;
        }
            if(a[i]=='z')
        {
            x[25]++;
        }
    }
    int max=x[0],max1;
    max1=0;
    for(i1=0;i1<26;i1++)
    {
        //printf("%d\n",x[i]);
        if(max>=x[i1])
        {
            
        }
        else
        {
            max=x[i1];
            max1=i1;
            
        }
    }
    printf("%c\n",a1[max1]);
    
}

return 0;
}

修改如下,供参考:

#include<stdio.h>
#include<string.h>
char a[30001];
int  x[26];
int main()
{
    int q,l,r,i,max;
    memset(x,0,sizeof(x));
    scanf("%d",&q);
    scanf("%s",a);
    while (q--)
    {
        memset(x,0,sizeof(x));
        scanf("%d %d",&l,&r);
        for (i = l; i <= r; i++)
        {
            x[a[i]-'a']++;
        }
        max = x[0]
        for (i = 0; i < 26; i++)
        {
            if (max < x[i])
                max = x[i];
        }
        for (i = 0; i < 26; i++)
        {
            if (max == x[i])
            {
                printf("%c\n", i+'a');
                break;
            }
        }
    }
    return 0;
}