#P1003. 01序列取反与求和

01序列取反与求和

题目描述

给你一个长度为 nn 的数列 a1,a2,,ana_1, a_2, \ldots, a_n,初始时数列中的每个元素的数值均为 00

接下来有 mm 次操作,操作分为如下两种类型:

  • 0 l r0\ l\ r:将下标区间内的每个元素都取反(即对于任意 lirl \le i \le r,令 ai1aia_i \leftarrow 1 - a_i
  • 1 l r1\ l\ r:查询下标区间内存在多少个数值为 11 的元素(即计算 i=lrai\sum\limits_{i=l}^r a_i

输入格式

第一行,两个整数 nnmm,分别表示数列长度即操作次数(1n,m1051 \le n , m \le 10^5)。

接下来 mm 行,每行包含一个操作(0 l r0\ l\ r1 l r1\ l\ r,其中 1lrn1 \le l \le r \le n)。

输出格式

对于每次查询操作,输出一行,包含一个整数,表示下标区间 [l,r][l, r] 范围内 11 的个数。

样例

4 5
0 1 2
0 2 4
1 2 3
0 2 4
1 1 4
1
2

说明/提示

数据规模与约定

  • 对于 30%30\% 的数据,n,m1000n,m \le 1000
  • 对于 100%100\% 的数据,n,m105n,m \le 10^5