开关灯升级版问题!题目大意在代码注释里,TLE了!
#include <bits/stdc++.h>
using namespace std;
// n, m最大1e6
const int N = 1e6 + 10;
bool light[N];
int main() {
int n, m;
scanf("%d%d", &n, &m);
memset(light, false, sizeof(light));
// 开关灯问题
while (m--) {
int op;
scanf("%d", &op);
if (op == 1) {
int x, y;
scanf("%d%d", &x, &y);
// 将 [x, y] 区间内的元素(开变成关,关变成开)
for (int i = x; i <= y; i++) {
light[i] = !light[i];
}
} else if (op == 2) {
int x;
scanf("%d", &x);
// 将所有为 x 倍数的灯翻转 开变成关,关变成开)
for (int i = x; i <= n; i += x) {
light[i] = !light[i];
}
} else if (op == 3) {
// 将所有灯关闭
memset(light, false, sizeof(light));
}
}
for (int i = 1; i <= n; i++) {
if (light[i]) {
// 输出
printf("%d ", i);
}
}
return 0;
}
各位大佬帮我看看!