| 比赛 |
期末考试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;
}