hpnq

Untitled

Dec 16th, 2022
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.39 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3.  
  4. //speed coding
  5.  
  6. #define mp make_pair
  7. #define cve(a) for (auto i : a) {cout << i << " ";  } cout << "\n";
  8. #define f first
  9. #define s second
  10. #define loop(x, n) for (ll i = x; i < n; i++)
  11. #define err cout << "ERROR" << endl;
  12. #define all(x) x.begin(), x.end()
  13. #define pb push_back
  14. #define sz(x) x.size()
  15.  
  16. // types
  17. #define pii pair<int, int>
  18. #define pll pair<ll, ll>
  19. #define vvi vector<vector<int>>
  20. #define vvll vector<vector<ll>>
  21. typedef long long ll;
  22.  
  23. // types of data
  24. #define inf 1000000000
  25. #define infll 1000000000000000000
  26. #define mod 1000000009
  27.  
  28. using namespace std;
  29.  
  30. #define DEBUG 1
  31.  
  32. ll nod(ll a, ll b){
  33.     if(a == -1){
  34.         return b;
  35.     }else if (b == -1){
  36.         return a;
  37.     }
  38.     return __gcd(a, b);
  39. }
  40. struct sgt{
  41.     vector<ll> t;
  42.     ll d;
  43.     sgt(vector<ll> &a){
  44.         ll n = sz(a);
  45.         ll k = 1;
  46.         while(k < n){
  47.             k*=2;
  48.         }
  49.         d = k;
  50.         t.resize(2*d, -1);
  51.  
  52.         loop(d, d+n){
  53.             t[i] = a[i-d];
  54.         }
  55.         for(ll i = d-1; i > 0; i--){
  56.             t[i] = nod(t[2*i], t[2*i + 1]);
  57.         }
  58.  
  59.     }
  60.     ll gcd(ll l, ll r, ll lx, ll rx, ll v){
  61.         if(lx > r || rx < l){
  62.             return -1;
  63.         }
  64.         if(lx >= l && rx <= r){
  65.             cout << "\nlx rx " << lx << " " << rx << " " << v  << " " << t[v] << endl;
  66.             return t[v];
  67.         }
  68.         ll m = (lx + rx)/2;
  69.         return nod(gcd(l, r, lx, m, 2*v ), gcd(l, r, m+1, r, 2 * v + 1));
  70.     }
  71.     ll gcd(ll l, ll r){
  72.         return  gcd(l, r, 0, d-1, 1);
  73.     }
  74.  
  75.  
  76.  
  77. };
  78.  
  79. void solve(){
  80.     ll n, m;
  81.     cin >> n;
  82.     vector<ll> a(n);
  83.     loop(0, n) cin >> a[i];
  84.     sgt sg(a);
  85.     cin >> m;
  86.     loop(0, m){
  87.         char t;
  88. //        cin >> t;
  89.         if(false){
  90. //            ll j, x;
  91. //            cin >> j >> x;;
  92. //            j--;
  93. //            sg.add(x, j);
  94.         }else{
  95.             ll l, r;
  96.             cin >> l >> r;
  97.             l--, r--;
  98.             cout << sg.gcd(l,r) << " ";
  99.  
  100.         }
  101.     }
  102.     cout << "\n";
  103.     for(auto i : sg.t){
  104.         cout << i << " ";
  105.     }
  106. }
  107.  
  108. int main() {
  109. #ifdef DEBUG
  110.     freopen("text.txt", "r", stdin);
  111. #else
  112.     //    freopen("divisors.in", "r", stdin);
  113.     //    freopen("divisors.out", "w", stdout);
  114.  
  115.  
  116. #endif
  117. //    int n;
  118. //    cin >> n;
  119. //    loop(0, n) {
  120. //        solve();
  121. //
  122. //    }
  123.     solve();
  124.     return 0;
  125. }
  126.  
Add Comment
Please, Sign In to add comment