Pre Computation Problem # C ++, Prefix sum

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

int main(){
    int t;
    cin>> t;
    while(t--){
        // basic I/O
        int N, Q;
        cin>> N>> Q;

        // array
        int arr[N];
        for(int i=1;i<=N;i++){
            cin>> arr[i];
        }

        // pre computation
        int forward[N+5];
        int backward[N+5];
        forward[0= backward[N+1= 0;
        // for 1 to l-1
        for(int i=1;i<=N;i++){
            forward[i] = __gcd(arr[i], forward[i-1]);
        }
        // for N to r+1
        for(int i=N;i>0;i--){
            backward[i] = __gcd(arr[i], backward[i+1]);
        }

        // queries
        while(Q--){
            int l, r;
            cin>> l>> r;

            // logic
            cout<< __gcd(forward[l-1], backward[r+1])<<endl;
        }
    }
    return 0;
}

                            <Problem link>

Comments

Popular Posts