/ Vijos / 题库 /

序列变换

序列变换

时间限制:0.5秒  内存限制:256M


【题目描述】

  给定一个 \(01\) 序列,序列里面包含了 \(n\) 个数,下标从 \(0\) 开始。这些数要么是 \(0\),要么是 \(1\),现在对于这个序列有四种变换操作和询问操作:

  - 0 l r 把 \([l, r]\) 区间内的所有数全变成 \(0\);
  - 1 l r 把 \([l, r]\) 区间内的所有数全变成 \(1\);
  - 2 l r 把 \([l,r]\) 区间内的所有数全部取反,也就是说把所有的 \(0\) 变成 \(1\),把所有的 \(1\) 变成 \(0\);
  - 3 l r 询问 \([l, r]\) 区间内总共有多少个 \(1\);

  对于每一个询问操作,都需要给出回答。

【输入格式】

  第一行两个正整数 \(n,m\),表示序列长度与操作个数。
  第二行包括 \(n\) 个数,表示序列的初始状态。
  接下来 \(m\) 行,每行三个整数,表示一次操作。

【输出格式】

  对于每一个询问操作,输出一行一个数,表示其对应的答案。

【输入输出样例】

 Input

10 10
0 0 0 1 1 0 1 0 1 1
1 0 2
3 0 5
2 2 2
2 0 4
0 3 6
2 3 7
3 2 8
1 0 5
0 5 6
3 3 9

 Output

5
7
5

【数据限制】

  对于 \(30\%\) 的数据,\(1≤n,m≤1000\)
  对于 \(100\%\) 的数据,\(1≤n,m≤2×10^5\)

【来源】

  Mr.he

信息

ID
3154
难度
9
分类
数据结构 | 线段树 点击显示
标签
(无)
递交数
2
已通过
1
通过率
50%
被复制
2
上传者