C语言的小问题 入手好难

用C语言写
输入n个数,接下来一行有一个数字q,接下来q行,每行有两个数l,r,代表区间开始的编号和结束的编号。问从第L个数到第R个数的和

#include<stdio.h>
int main()
{
int t;
scanf("%d",&t);
while(t--) {
int l,r,n,x,q;
//int sum[10]={0};
long long sum=0;
scanf("%d",&n);
for(int i=0;i<n;i++) {
scanf("%d",&x);
}
scanf("%d",&q);
for(int j=0;j<q;j++) {
scanf("%d%d",&l,&r);
for(int k=l;k<=r;k++) {
sum=sum+k;
}
}

    printf("%lld",sum);
}
return 0;

}
这是我自己写的 有点小问题。

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int n = 0, q = 0, l = 0, r = 0, i = 0, sum = 0;
    scanf("%d", &n);
    int* arr = (int*)malloc(sizeof(int) * n);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    scanf("%d", &q);
    while (q--)
    {
        sum = 0;
        scanf("%d%d", &l, &r); //l和r代表数组下标
        for (i = l; i <= r; i++)
        {
            sum += arr[i];
        }
        printf("%d\n", sum);
    }
    return 0;
}