Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using namespace std;
- #include <vector>
- #include <queue>
- #include <algorithm>
- #include <cmath>
- #include <utility>
- #include <bitset>
- #include <memory.h>
- #include <set>
- #include <string>
- #include <stack>
- #include <iomanip>
- #include <map>
- #define pb push_back
- #define pii pair<int,int>
- #define F first
- #define S second
- #define LL long long
- /*
- 8e7 so dian
- FHVirus so dian
- youou so dian
- KYW so dian
- hubert so dian
- jass so dian
- tingyu so dian
- */
- //IO
- #include <iostream>
- #define theyRSOOOOOOOOODIAN ios_base::sync_with_stdio(false),cin.tie(0);
- #define endl '\n'
- //workspace
- LL seg[4004000];
- #define mid (LB+RB)/2
- const LL mod = 1e9+7;
- inline LL modInver(const int x){
- LL val = 1,multi = x;
- int k = mod - 2;
- while (k){
- if (k & 1){
- val *= multi;
- val %= mod;
- }
- multi *= multi;
- multi %= mod;
- k >>= 1;
- }
- return val;
- }
- LL gcd(LL a,LL b){
- if (a % b)
- return gcd(b,a%b);
- return b;
- }
- inline LL lcm(int a,int b){
- return (a * b * modInver(gcd(a,b))) % mod;
- }
- void modify (int i,int val,int cur,int LB,int RB){
- if (LB == RB){
- seg[cur] = val;
- return;
- }
- if (i <= mid)
- modify (i,val,cur*2,LB,mid);
- else
- modify (i,val,cur*2+1,mid+1,RB);
- if (seg[cur*2] && seg[cur*2+1]){
- seg[cur] = lcm(seg[cur*2],seg[cur*2+1]);
- }
- }
- LL query (int l,int r,int cur,int LB,int RB){
- if (l == LB && r == RB)
- return seg[cur];
- if (r <= mid)
- return query(l,r,cur*2,LB,mid);
- else if (l > mid)
- return query(l,r,cur*2+1,mid+1,RB);
- else
- return lcm(query(l,mid,cur*2,LB,mid),query(mid+1,r,cur*2+1,mid+1,RB));
- }
- int main(){
- theyRSOOOOOOOOODIAN
- int n,q;
- cin >> n >> q;
- for (int i=1;i<=n;++i){
- int x;
- cin >> x;
- modify (i,x,1,1,n);
- }
- while (q--){
- int l,r;
- cin >> l >> r;
- cout << query (l,r,1,1,n) << '\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement