#CSP202312D. 宝藏

    ID: 592 Type: Default 1500ms 512MiB Tried: 14 Accepted: 1 Difficulty: 6 Uploaded By: Tags>CSP线性代数矩阵乘法数据结构线段树其他括号序列分块

宝藏

题目来自第 32 次 CSP 认证 T4,评测使用自造高质量复刻数据。我们承认原始题面与大样例版权均归中国计算机学会(CCF)所有,因此题面与评测服务均免费对外开放。如果您认为我们侵犯了您的权益,可联系我们

时间限制: 1.5 秒

空间限制: 512 MB

题目描述

西西艾弗岛上埋藏着一份宝藏,小 C 根据藏宝图找到了宝藏的位置。藏有宝藏的箱子被上了锁,旁边写着一些提示:

  • 给定 nn 条指令,编号为 1n1 \sim n,其中每条指令都是对一个双端队列的操作,队列中的元素均为 2×22 \times 2矩阵
  • 在某些时刻,某一条指令可能会改变;
  • 在某些时刻,密码可以由以下方式计算:对于给定的指令区间 [l,r][l, r],对初始为空的队列依次执行第 lrl \sim r 条指令,将得到的队列里的所有矩阵从头到尾相乘,并将乘积矩阵中的所有元素对 998244353998244353 取模,得到的矩阵即为密码;特别地,若队列为空,则密码为单位矩阵;如果能分别计算出这些时刻的密码,将能够打开箱子的锁,从而获得宝藏。

经过小 C 的观察,每条指令的形式均为以下三种之一:

  1. 给定 2×22 \times 2 的矩阵 A\mathbf{A},将 A\mathbf{A} 插入队列的头部;
  2. 给定 2×22 \times 2 的矩阵 B\mathbf{B},将 B\mathbf{B} 插入队列的尾部;
  3. 若队列非空,删除队列中最晚被插入的矩阵。

小 C 将所有的时刻发生的事件均记录了下来。具体地,共有 mm 个时刻,每个时刻可能会发生两种事件:

  1. ii 条指令改变,改变后的指令仍为以上三种形式之一;
  2. 给定指令区间 [l,r][l, r],求依次执行第 lrl \sim r 条指令得到的密码。

由于小 C 并不会这个问题,他向你发起了求助。你需要帮助小 C 求出所有类型为 22 的事件所对应的密码。

输入格式

从标准输入读入数据。

输入的第一行包含两个正整数 n,mn, m

接下来 nn 行,按顺序给出初始时刻的每条指令:

  • 输入的第一个正整数 vv 描述这条指令的形式,保证 vv1,2,31, 2, 3 中的一种。
  • v=1v = 1,接下来给出四个非负整数 A1,1,A1,2,A2,1,A2,2A_{1, 1}, A_{1, 2}, A_{2, 1}, A_{2, 2},表示操作为将 2×22 \times 2 的矩阵 A\mathbf{A} 插入队列的头部;
  • v=2v = 2,接下来给出四个非负整数 B1,1,B1,2,B2,1,B2,2B_{1, 1}, B_{1, 2}, B_{2, 1}, B_{2, 2},表示操作为将 2×22 \times 2 的矩阵 B\mathbf{B} 插入队列的尾部;
  • v=3v = 3,表示操作为若队列非空,删除队列中最晚被插入的矩阵;

接下来 mm 行,按顺序给出每个时刻发生的事件:

  • 输入的第一个正整数 vv 描述这个事件的类型,保证 vv1,21, 2 中的一种。
  • v=1v = 1,接下来给出一个正整数 ii 与一条指令,表示将第 ii 条指令更新为当前输入的指令,指令的输入格式与初始时刻指令的输入格式相同。
  • v=2v = 2,接下来给出两个正整数 l,rl, r,你需要求出依次执行第 lrl \sim r 条指令得到的密码。

输出格式

输出到标准输出。

对于所有类型为 22 的事件,输出一行四个非负整数 C1,1,C1,2,C2,1,C2,2C_{1, 1}, C_{1, 2}, C_{2, 1}, C_{2, 2},表示该时刻的密码 C\mathbf{C}

3 4
1 2 3 9 3
2 6 9 4 2
2 2 8 2 1
2 2 3
1 2 1 3 1 0 1
1 3 3
2 1 3
30 57 12 34
2 3 9 3

样例 1 解释

第一次事件发生时,

  • 22 条指令为在序列尾部插入矩阵 [6942]\begin{bmatrix} 6 & 9 \\ 4 & 2 \end{bmatrix}
  • 33 条指令为在序列尾部插入矩阵 [2821]\begin{bmatrix} 2 & 8 \\ 2 & 1 \end{bmatrix}

依次执行第 232 \sim 3 条指令,得到的队列为 ${\begin{bmatrix} 6 & 9 \\ 4 & 2 \end{bmatrix}, \begin{bmatrix} 2 & 8 \\ 2 & 1 \end{bmatrix}}$,则密码为

$$\begin{bmatrix} 6 & 9 \\ 4 & 2 \end{bmatrix} \times \begin{bmatrix} 2 & 8 \\ 2 & 1 \end{bmatrix} = \begin{bmatrix} 30 & 57 \\ 12 & 34 \end{bmatrix}$$

第四次事件发生时,

  • 11 条指令为在序列头部插入矩阵 [2393]\begin{bmatrix} 2 & 3 \\ 9 & 3 \end{bmatrix}
  • 22 条指令为在序列头部插入矩阵 [3101]\begin{bmatrix} 3 & 1 \\ 0 & 1 \end{bmatrix}
  • 33 条指令为若队列非空,删除队列中最晚被插入的矩阵。

依次执行第 131 \sim 3 条指令,得到的队列为 [2393]{\begin{bmatrix} 2 & 3 \\ 9 & 3 \end{bmatrix}},则密码为 [2393]\begin{bmatrix} 2 & 3 \\ 9 & 3 \end{bmatrix}

样例 2

见题目文件区的 2.in2.ans

样例 2 解释

该样例满足子任务 1 的限制。

样例 3

见题目文件区的 3.in3.ans

样例 3 解释

该样例满足子任务 2 的限制。

样例 4

见题目文件区的 4.in4.ans

样例 4 解释

该样例满足子任务 4 的限制。

样例 5

见题目文件区的 5.in5.ans

样例 5 解释

该样例满足子任务 4 的限制。

样例 6

见题目文件区的 6.in6.ans

样例 6 解释

该样例满足子任务 5 的限制。

样例 7

见题目文件区的 7.in7.ans

样例 7 解释

该样例满足子任务 6 的限制。

子任务

对于所有测试数据,满足 1n,m1051 \leq n, m \leq 10 ^ 50Ai,j,Bi,j<9982443530 \leq A_{i, j}, B_{i, j} < 9982443531lrn1 \leq l \leq r \leq n

本题采用捆绑测试,你只有通过一个子任务中的所有测试点才能得到该子任务的分数。

子任务编号 分值 n,mn,m\le 特殊性质
1 15 10210^2
2 20 10310^3
3 10 5×1045\times 10^4 所有指令的形式均为 11
4 所有指令的形式均为 1122
5 20 所有事件的类型均为 22
6 10
7 15 10510^5