1 条题解

  • 0
    @ 2025-10-14 9:17:53
    #include <bits/stdc++.h>
    using namespace std;
    int a[50020];
    int st[50020][30];
    int lg2[50020];
    int n, m, x, y;
    int gcd(int a, int b) {
        if (b == 0)
            return a;
        return gcd(b, a % b);
    }
    void make_lg2() {
        lg2[0] = lg2[1] = 0;
        for (int i = 2; i <= n; i++) {
            lg2[i] = lg2[i >> 1] + 1;
        }
        return;
    }
    void make_st() {
        for (int i = 1; (1 << i) <= n; i++) {
            int mid = 1 << (i - 1);
            for (int j = 0; j + (mid << 1) <= n; j++) {
                st[j][i] = gcd(st[j][i - 1], st[j + mid][i - 1]);
            }
        }
        return;
    }
    int query(int l, int r) {
        return gcd(st[l][lg2[r - l + 1]], st[r - (1 << lg2[r - l + 1]) + 1][lg2[r - l + 1]]);
    }
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        cin >> n >> m;
        for (int i = 0; i < n; i++) {
            cin >> a[i];
            st[i][0] = a[i];
        }
        make_lg2();
        make_st();
        while (m--) {
            cin >> x >> y;
            cout << query(x - 1, y - 1) << endl;
        }
        return 0;
    }
    
    • 1

    信息

    ID
    1258
    时间
    1000ms
    内存
    256MiB
    难度
    (无)
    标签
    (无)
    递交数
    0
    已通过
    0
    上传者