C1521 [Ynoi]2014-E

内存限制:256 MB 时间限制:3000 ms

题目描述

维护一个长为 $n$ 的01序列 $a$,有 $m$ 个操作:

1 l r: 把区间 $[l,r]$ 的数变成 $0$

2 l r: 把区间 $[l,r]$ 的数变成 $1$

3 l r: $[l,r-1]$ 内所有数 $a[i]$,与 $a[i+1]$ 按位或,这些数同时进行这个操作

4 l r: $[l+1,r]$ 内所有数 $a[i]$,与 $a[i-1]$ 按位或,这些数同时进行这个操作

5 l r: $[l,r-1]$ 内所有数 $a[i]$,与 $a[i+1]$ 按位与,这些数同时进行这个操作

6 l r: $[l+1,r]$ 内所有数 $a[i]$,与 $a[i-1]$ 按位与,这些数同时进行这个操作

7 l r: 查询一个区间 $[l,r]$ 的和

输入格式

第一行两个数表示 $n$ 和 $m$。

第二行 $n$ 个数表示序列 $a$。

之后 $m$ 行,每行三个数 $opt$ $l$ $r$,表示是哪一种操作以及操作对应的区间。

输出

对于每个查询操作输出一行一个数表示答案。

样例

样例输入 1

5 5 0 1 0 0 1 3 2 5 5 2 5 2 2 2 6 1 5 7 1 5

样例输出 1

1

提示

对于 $100\%$ 的数据,$n,m \le 10^6$。