题解区中除了 @BigSmall_En 的题解以外全部有误,本质是因为push_down函数无法保证复杂度,可以构造数据使得每次更新都会遍历一遍一整棵线段树,卡到 O(nq).
generator:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 1e5+5;
const int Mod = 998244353;
int main() {
puts("500000 500000");
for (int i = 1; i <= 500000; i++) {
if (i & 1) printf("600000 ");
else printf("1 ");
}
puts("");
for (int i = 1; i <= 500000; i++) {
printf("2 1 500000 %d\n", 600000 - i);
}
return 0;
}