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;
}

Comments
Post a Comment