| 比赛 |
期末考试0 |
评测结果 |
ATTTTTTTTT |
| 题目名称 |
我能在摸鱼被发现的情况下躲避教练的视奸吗 |
最终得分 |
10 |
| 用户昵称 |
对立猫猫对立 |
运行时间 |
27.928 s |
| 代码语言 |
C++ |
内存使用 |
12.54 MiB |
| 提交时间 |
2026-02-07 09:24:21 |
显示代码纯文本
#include <bits/stdc++.h>
#define int unsigned int
using namespace std;
inline int read() {
int x = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch > '9') {
if (ch == '-') f = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9') {
x = x * 10 + ch - '0';
ch = getchar();
}
return x * f;
}
struct bloc {
int data[500005];
int size;
int type;
int belong[500005];
int sum[500005];
void init(int n) {
size = sqrt(n);
for(int i = 1; i <= n; i++) {
belong[i] = (i + size - 1) / size;
}
memset(sum, 0, sizeof(sum));
if(type == 2) {
for(int i = 1; i <= belong[n]; i++) {
sum[i] = ~0;
}
}
}
void build(int n) {
switch (type) {
case 1: {
for(int i = 1; i <= n; i++) {
if(sum[belong[i]] == 0) sum[belong[i]] = data[i];
else sum[belong[i]] = __gcd(sum[belong[i]], data[i]);
}
break;
}
case 2: {
for(int i = 1; i <= n; i++) {
sum[belong[i]] &= data[i];
}
break;
}
case 3: {
for(int i = 1; i <= n; i++) {
sum[belong[i]] |= data[i];
}
break;
}
}
}
int query(int l, int r) {
int ans;
switch (type) {
case 1: {
ans = 0;
break;
}
case 2: {
ans = ~0;
break;
}
case 3: {
ans = 0;
break;
}
}
int bl = belong[l], br = belong[r];
if(bl == br) {
if(type == 1) {
ans = data[l];
}
for(int i = l; i <= r; i++) {
switch (type) {
case 1: {
ans = __gcd(ans, data[i]);
break;
}
case 2: {
ans &= data[i];
break;
}
case 3: {
ans |= data[i];
break;
}
}
}
} else {
if(type == 1) {
ans = data[l];
}
for(int i = l; i <= bl * size; i++) {
switch (type) {
case 1: {
ans = __gcd(ans, data[i]);
break;
}
case 2: {
ans &= data[i];
break;
}
case 3: {
ans |= data[i];
break;
}
}
}
for(int i = bl + 1; i <= br - 1; i++) {
switch (type) {
case 1: {
ans = __gcd(ans, sum[i]);
break;
}
case 2: {
ans &= sum[i];
break;
}
case 3: {
ans |= sum[i];
break;
}
}
}
for(int i = (br - 1) * size + 1; i <= r; i++) {
switch (type) {
case 1: {
ans = __gcd(ans, data[i]);
break;
}
case 2: {
ans &= data[i];
break;
}
case 3: {
ans |= data[i];
break;
}
}
}
}
return ans;
}
};
bloc a, b, c;
int n, m;
signed main() {
freopen("shijian.in", "r", stdin);
freopen("shijian.out", "w", stdout);
n = read();
m = read();
a.type = 2;
b.type = 3;
c.type = 1;
a.init(n);
b.init(n);
c.init(n);
for(int i = 1; i <= n; i++) {
a.data[i] = read();
}
for(int i = 1; i <= n; i++) {
b.data[i] = read();
}
for(int i = 1; i <= n; i++) {
c.data[i] = read();
}
a.build(n);
b.build(n);
c.build(n);
if(m <= 100000) {
while(m--) {
int l, r;
l = read();
r = read();
int out = 0;
for(int i = l; i <= r; i++) {
for(int j = i; j <= r; j++) {
int ans = 1;
// cout << a.query(i, j) << " " << b.query(i, j) << " " << c.query(i, j) << "\n";
ans *= a.query(i, j);
ans *= b.query(i, j);
ans *= c.query(i, j);
out += ans;
}
}
printf("%d\n", out);
}
}
else {
int out = 0;
while(m--) {
int l, r, ans = 0;
l = read();
r = read();
int ans1 = 1;
for(int i = l; i <= r; i++) {
for(int j = i; j <= r; j++) {
ans1 *= a.query(i, j);
ans1 *= b.query(i, j);
ans1 *= c.query(i, j);
ans += ans1;
}
}
out ^= ans;
}
printf("%d\n", out);
}
}