Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits\stdc++.h>
- using namespace std;
- struct SegTree {
- int n;
- vector<int> a, t;
- SegTree(const vector<int>& data, int nn) {
- n = nn;
- a = data;
- t.resize(4 * a.size());
- build(1, 0, n - 1);
- }
- void build(int v, int l, int r) {
- if (l == r) {
- t[v] = a[l];
- return;
- }
- int m = (l + r) / 2;
- build(v * 2, l, m);
- build(v * 2 + 1, m + 1, r);
- t[v] = gcd(t[v * 2 + 1], t[v * 2]);
- }
- int get(int v, int vl, int vr, int l, int r) {
- if (vr < l || vl > r) return a[l];
- if (vl >= l && vr <= r) return t[v];
- int m = (l + r) / 2;
- return gcd(get(v * 2, vl, m, l, r), get(v * 2 + 1, m + 1, vr, l, r));
- }
- int get(int l, int r) { return get(1, 0, n - 1, l, r); }
- };
- int main() {
- freopen("file.txt", "w", stdout);
- int n;
- cin >> n;
- vector<int> a(n);
- for (int i = 0; i < n; ++i) {
- cin >> a[i];
- }
- int k;
- cin >> k;
- SegTree segTree = SegTree(a, n);
- for (int i = 0; i < k; ++i) {
- int l;
- int r;
- cin >> l;
- cin >> r;
- l--;
- r--;
- cout << segTree.get(l, r) << " ";
- }
- fclose(stdout);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement