#L3043. 「ZJOI2019」线段树

    ID: 4504 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>动态规划树形DP状态设计优化数据结构线段树

「ZJOI2019」线段树

题目描述

九条可怜是一个喜欢数据结构的女孩子,在常见的数据结构中,可怜最喜欢的就是线段树。 线段树的核心是懒标记,下面是一个带懒标记的线段树的伪代码,其中 tagtag 数组为懒标记:

其中函数 Lson(Node)\texttt{Lson}(\text{Node}) 表示 Node\text{Node} 的左儿子,Rson(Node)\texttt{Rson}(\text{Node}) 表示 Node\text{Node} 的右儿子。

现在可怜手上有一棵 [1,n][1, n] 上的线段树,编号为 11。这棵线段树上的所有节点的 tagtag 均为 00。接下来可怜进行了 mm 次操作,操作有两种:

  • 1 l r1\ l\ r,假设可怜当前手上有 tt 棵线段树,可怜会把每棵线段树复制两份(tagtag 数组也一起复制),原先编号为 ii 的线段树复制得到的两棵编号为 2i12i − 12i2i,在复制结束后,可怜手上一共有 2t2t 棵线段树。接着,可怜会对所有编号为奇数的线段树进行一次 Modify(root,1,n,l,r)\texttt{Modify}(\text{root}, 1, n, l, r)
  • 22,可怜定义一棵线段树的权值为它上面有多少个节点 tagtag11。可怜想要知道她手上所有线段树的权值和是多少。

输入格式

第一行输入两个整数 nn, mm 表示初始区间长度和操作个数。

接下来 mm 行每行描述一个操作,输入保证 1lrn1 \le l \le r \le n


输出格式

对于每次询问,输出一行一个整数表示答案,答案可能很大,对 998244353998244353 取模后输出即可。


样例

输入

5 5
2
1 1 3
2
1 3 5
2

输出

0
1
6

[1,5][1, 5] 上的线段树如下图所示:

在第一次询问时,可怜手上有一棵线段树,它所有点上都没有标记,因此答案为 00

在第二次询问时,可怜手上有两棵线段树,按照编号,它们的标记情况为:

  • [1,3][1, 3] 上有标记,权值为 11
  • 没有点有标记,权值为 00

因此答案为 11

在第三次询问时,可怜手上有四棵线段树,按照编号,它们的标记情况为:

  • [1,2][1, 2], [3,3][3, 3], [4,5][4, 5] 上有标记,权值为 33
  • [1,3][1, 3] 上有标记,权值为 11
  • [3,3][3, 3], [4,5][4, 5] 上有标记,权值为 22
  • 没有点有标记,权值为 00

因此答案为 66


数据范围与提示

测试点 nn mm 其他约定
1 103\le 10^3 10\le 10
2
3 103\le 10^3
4
5 105\le 10^5 询问只有一个
6
7
8
9
10

对于 100%100\% 的数据,1lrn1 \le l \le r \le n