#ifndef ONLINE_JUDGE #define _GLIBCXX_DEBUG #endif #include #include #define pass (void)0 #define INF (1<<30)-1 #define INFLL (1LL<<60)-1 using namespace std; using namespace atcoder; using mint = modint998244353; using ll = long long; struct Node { int value; int cnt; }; // 区間加算・区間最小値取得 Node op(Node left, Node right) { if (left.value < right.value) { return Node(left.value, left.cnt); } else if (left.value > right.value) { return Node(right.value, right.cnt); } else { return Node(left.value, left.cnt+right.cnt); } } Node e(){ return Node(0, 0); } Node mapping(int f, Node x){ return Node(x.value+f, x.cnt); } int composition(int f, int g){ return f+g; } int id(){ return 0; } int main() { int N, Q; cin >> N; cin >> Q; vector> query(Q); for (int i=0; i> q; if (q == 1) { int L, R; cin >> L >> R; query[i] = {q, L-1, R-1}; } else if (q == 2) { int idx; cin >> idx; query[i] = {q, idx-1}; } else { query[i] = {q}; } } vector S(N-1, {0, 1}); lazy_segtree seg(S); for (int i=0; i