比赛 期末考试0 评测结果 AAATTTTTTT
题目名称 我能在摸鱼被发现的情况下躲避教练的视奸吗 最终得分 30
用户昵称 dbk 运行时间 21.852 s
代码语言 C++ 内存使用 42.29 MiB
提交时间 2026-02-07 11:04:29
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 10;
const int T = (int)log2(N) + 1;
unsigned int ans;
unsigned long long mm;
int n, m, l, r;
int a[N][T + 1], b[N][T + 1], c[N][T + 1];
long long sum[1010][1010];
inline int read(){
	int x = 0,f = 1;
    char ch = getchar();
	while(!isdigit(ch)){if(ch == '-')f = -1;ch = getchar();}
	while(isdigit(ch))x = (x<<3) + (x<<1) + ch - 48,ch = getchar();
	return x * f;
}
int q1(int l, int r){
    int t = log2(r - l + 1);
    return (a[l][t] & a[r - (1 << t) + 1][t]);
}
int q2(int l, int r){
    int t = log2(r - l + 1);
    return (b[l][t] | b[r - (1 << t) + 1][t]); 
}
int q3(int l, int r){
    int t = log2(r - l + 1);
    return __gcd(c[l][t], c[r - (1 << t) + 1][t]);   
}
int main(){
    freopen("shijian.in", "r", stdin);
    freopen("shijian.out", "w", stdout);
    n = read(), m = read();
    for(int i = 1;i <= n;i++){
        a[i][0] = read();
    }
    for(int i = 1;i <= n;i++){
        b[i][0] = read();
    }
    for(int i = 1;i <= n;i++){
        c[i][0] = read();
    }
    for(int j = 1;j <= T;j++){
        for(int i = 1;i <= n - (1 << j) + 1;i++){
            a[i][j] = a[i][j - 1] & a[i + (1 << (j - 1))][j - 1];
        }
    }
    for(int j = 1;j <= T;j++){
        for(int i = 1;i <= n - (1 << j) + 1;i++){
            b[i][j] = b[i][j - 1] | b[i + (1 << (j - 1))][j - 1];
        }
    }
    for(int j = 1;j <= T;j++){
        for(int i = 1;i <= n - (1 << j) + 1;i++){
            c[i][j] = __gcd(c[i][j - 1], c[i + (1 << (j - 1))][j - 1]);
        }
    }
    for(int i = 1;i <= n;i++){
        for(int j = i;j <= n;j++){
            sum[i][j] += sum[i][j - 1] + (q1(i, j) * q2(i, j) * q3(i, j));
        }
    }
    while(m--){
        ans = 0;
        mm = 1;
        cin >> l >> r;
        for(int i = l;i <= r;i++){
            ans += sum[i][r];
        }
        cout<<ans<<endl;
    }
    return 0;
}