Advertisement
Guest User

code

a guest
May 2nd, 2023
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.29 KB | Source Code | 0 0
  1. #include <bits\stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. struct SegTree {
  6.     int n;
  7.     vector<int> a, t;
  8.     SegTree(const vector<int>& data, int nn) {
  9.         n = nn;
  10.         a = data;
  11.         t.resize(4 * a.size());
  12.  
  13.         build(1, 0, n - 1);
  14.  
  15.     }
  16.     void build(int v, int l, int r) {
  17.         if (l == r) {
  18.             t[v] = a[l];
  19.             return;
  20.         }
  21.         int m = (l + r) / 2;
  22.         build(v * 2, l, m);
  23.         build(v * 2 + 1, m + 1, r);
  24.         t[v] = gcd(t[v * 2 + 1], t[v * 2]);
  25.     }
  26.  
  27.     int get(int v, int vl, int vr, int l, int r) {
  28.         if (vr < l || vl > r) return a[l];
  29.         if (vl >= l && vr <= r) return t[v];
  30.         int m = (l + r) / 2;
  31.         return gcd(get(v * 2, vl, m, l, r), get(v * 2 + 1, m + 1, vr, l, r));
  32.     }
  33.  
  34.     int get(int l, int r) { return get(1, 0, n - 1, l, r); }
  35.  
  36. };
  37.  
  38. int main() {
  39.  
  40.     freopen("file.txt", "w", stdout);
  41.  
  42.     int n;
  43.     cin >> n;
  44.     vector<int> a(n);
  45.     for (int i = 0; i < n; ++i) {
  46.         cin >> a[i];
  47.     }
  48.     int k;
  49.     cin >> k;
  50.  
  51.     SegTree segTree = SegTree(a, n);
  52.  
  53.     for (int i = 0; i < k; ++i) {
  54.  
  55.         int l;
  56.         int r;
  57.         cin >> l;
  58.         cin >> r;
  59.         l--;
  60.         r--;
  61.  
  62.         cout << segTree.get(l, r) << " ";
  63.     }
  64.     fclose(stdout);
  65.     return 0;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement