static void Main() { string[] str; str = Console.ReadLine().Split(' '); int N = int.Parse(str[0]), Q = int.Parse(str[1]); var st = new LazySegTree <Node, int>(N, merge, resolve, postpone, new Node(0, 0, 1)); str = Console.ReadLine().Split(' '); for (int i = 0; i < N; ++i) { var A = int.Parse(str[i]); if (A == 0) { st.Update(i, i + 1, 1); } } for (int q = 0; q < Q; ++q) { str = Console.ReadLine().Split(' '); int T = int.Parse(str[0]), L = int.Parse(str[1]), R = int.Parse(str[2]); if (T == 1) { st.Update(L - 1, R, 1); } else { Console.WriteLine(st.Query(L - 1, R).ninv); } } }
public static void Solve() { var(N, Q) = Scanner.Scan <int, int>(); var A = Scanner.ScanEnumerable <int>().Select(x => x == 0 ? new S(1, 0, 0) : new S(0, 1, 0)).ToArray(); Func <S, S, S> operation = (l, r) => new S(l.Zero + r.Zero, l.One + r.One, l.Inversion + r.Inversion + l.One * r.Zero); var identityS = new S(0, 0, 0); Func <bool, S, S> mapping = (l, r) => l ? new S(r.One, r.Zero, r.One * r.Zero - r.Inversion) : r; Func <bool, bool, bool> composition = (l, r) => (l && !r) || (!l && r); var identityF = false; var lseg = new LazySegTree <S, bool>(A, operation, identityS, mapping, composition, identityF); for (var i = 0; i < Q; i++) { var(T, L, R) = Scanner.Scan <int, int, int>(); L--; if (T == 1) { lseg.Apply(L, R, true); } else { Console.WriteLine(lseg.Prod(L, R).Inversion); } } }
static void Main() { var str = Console.ReadLine().Split(' '); int H = int.Parse(str[0]), W = int.Parse(str[1]); var st = new LazySegTree <long, Barrier>(W, merge, resolve, postpone); for (int h = 0; h < H; ++h) { str = Console.ReadLine().Split(' '); int A = int.Parse(str[0]), B = int.Parse(str[1]); var v = A == 1 ? INF: st.Query(A - 2, A - 1); st.Update(A - 1, B, new Barrier(A - 2, v)); var ans = h + 1 + st.Query(0, W); Console.WriteLine(ans > INF ? -1 : ans); } }
static void Main() { var str = Console.ReadLine().Split(' '); int N = int.Parse(str[0]), Q = int.Parse(str[1]); S = new long[N + 1]; for (int i = 0; i < N; ++i) { S[i + 1] = (S[i] * 10 + 1) % mod; } var st = new LazySegTree <long, long>(N, merge, resolve, postpone); st.Update(0, N, 1); for (int q = 0; q < Q; ++q) { str = Console.ReadLine().Split(' '); int L = int.Parse(str[0]), R = int.Parse(str[1]), D = int.Parse(str[2]); st.Update(N - R, N - L + 1, D); Console.WriteLine(st.Query(0, N)); } }