比赛 期末考试0 评测结果 AAAEEEEEEE
题目名称 我能在摸鱼被发现的情况下躲避教练的视奸吗 最终得分 30
用户昵称 2_16鸡扒拌面 运行时间 1.085 s
代码语言 C++ 内存使用 7.50 MiB
提交时间 2026-02-07 12:29:06
显示代码纯文本
#include <iostream>
#include <algorithm>
using namespace std;

const int N = 1005;

unsigned int aa[N], bb[N], cc[N];
unsigned int andv[N][N], orv[N][N], gcdv[N][N];
unsigned int val[N][N];
unsigned int ps[N][N];
int n, m;

unsigned int gcd(unsigned int x, unsigned int y) {
    while (y) {
        unsigned int t = x % y;
        x = y;
        y = t;
    }
    return x;
}

int main() {
	freopen("shijian.in","r",stdin);
    freopen("shijian.out","w",stdout);
    cin >> n >> m;
    for (int i = 1; i <= n; ++i) cin >> aa[i];
    for (int i = 1; i <= n; ++i) cin >> bb[i];
    for (int i = 1; i <= n; ++i) cin >> cc[i];
    for (int l = 1; l <= n; ++l) {
        andv[l][l] = aa[l];
        orv[l][l] = bb[l];
        gcdv[l][l] = cc[l];
        for (int r = l+1; r <= n; ++r) {
            andv[l][r] = andv[l][r-1] & aa[r];
            orv[l][r] = orv[l][r-1] | bb[r];
            gcdv[l][r] = gcd(gcdv[l][r-1], cc[r]);
        }
    }
    for (int l = 1; l <= n; ++l) {
        for (int r = l; r <= n; ++r) {
            val[l][r] = andv[l][r] * orv[l][r] * gcdv[l][r];
        }
    }
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j) {
            ps[i][j] = val[i][j] + ps[i-1][j] + ps[i][j-1] - ps[i-1][j-1];
        }
    }
    while (m--) {
        int L, R;
        cin >> L >> R;
        unsigned int ans = 0;
        for (int lp = L; lp <= R; ++lp) {
            ans += ps[lp][R] - ps[lp][lp-1] - ps[lp-1][R] + ps[lp-1][lp-1];
        }
        cout << ans << endl;
    }
    
    return 0;
}