组合题
#include <iostream>using namespace std;int n, m, a[100007], L, R, lg[100007], i, j, t, dp[100007][25], pw[25];int gcd(int x, int y) {    if (y == 0) return x;    return gcd(y, x % y);}int main() {    cin >> n >> m;    for (i = 1; i <= n; i++) cin >> a[i];    t = 0;    pw[0] = 1;    for (i = 1; i <= 24; i++) pw[i] = pw[i - 1] * 2;    for (i = 1; i <= 100000; i++)        if (pw[t + 1] >= i) lg[i] = t;        else { t++; lg[i] = t; }    for (i = 1; i <= n; i++) {        dp[i][0] = a[i];    }    for (j = 1; j <= lg[n]; j++) {        for (i = 1; i + pw[j] - 1 <= n; i++) {            dp[i][j] = gcd(dp[i][j - 1], dp[i + pw[j - 1]][j - 1]);        }    }    for (i = 1; i <= m; i++) {        cin >> L >> R;        cout << gcd(dp[L][lg[R - L + 1]], dp[R - pw[lg[R - L + 1]] + 1][lg[R - L + 1]]) << endl;    }    return 0;}

说明:保证 1≤n≤1000001 \le n \le 100000,每次查询满足 1≤L≤R≤n1 \le L \le R \le n,且数组 aa 的元素均为正整数。

第 22 题判断题原卷 1.5 分

当 n=5n=5,a=4,2,6,3,3a={4, 2, 6, 3, 3},且仅有一次查询 L=2,R=5L=2, R=5 时,输出为 1。( )

填写答案
第 23 题判断题原卷 1.5 分

当某次查询的区间长度为 1(即 L=RL=R)时,该次查询的输出一定等于 a[L]。( )

填写答案
第 24 题判断题原卷 1.5 分

任意一次查询的输出结果一定不小于该查询区间内的最小值。( )

填写答案
第 25 题单选题原卷 3 分

对于 j≥1j \ge 1,数组 dp[i][j] 保存的是( )。

填写答案
第 26 题单选题原卷 3 分

若把一次求最大公约数的运算视为 O(1)O(1),则第 17—22 行建表过程的时间复杂度为( )。

填写答案
第 27 题单选题原卷 3 分

设 xx 为一次查询的区间长度(即 x=R−L+1x=R - L+ 1),则使得 lg[x] = 5 的 xx 的取值范围是( )。

填写答案