In this HackerEarth infinite arrays problem solution You are given an array A of size N. You have also defined an array B as the concatenation of array A for an infinite number of times.

Now, you are given Q queries. Each query consists of two integers, Li and Ri. Your task is to calculate the sum of the subarray of N from index Li to Ri.



HackerEarth Infinite arrays problem solution


HackerEarth Infinite arrays problem solution.

#include <bits/stdc++.h>
#define M 1000000007
using namespace std;

long long func(long long *sum,long long X,long long N)
{
    return (sum[X%N]+(((X/N)%M)*sum[N])%M)%M;
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    int T;
    cin>>T;
    while(T--)
    {
        int N;
        cin>>N;
        long long arr[N+1];
        for(int i=1;i<=N;i++)
            cin>>arr[i];
        int Q;
        cin>>Q;
        long long L[Q],R[Q];
        for(int i=0;i<Q;i++)
            cin>>L[i];
        for(int i=0;i<Q;i++)
            cin>>R[i];
        long long sum[N+1];
        sum[0]=0;
        for(int i=1;i<=N;i++)
            sum[i]=(sum[i-1]+arr[i])%M;

        for(int i=0;i<Q;i++)
            cout<<(func(sum,R[i],N)-func(sum,L[i]-1,N)+M)%M<<" ";
        cout<<endl;
    }
    
}