1 条题解
-
0
#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
- 上传者