题意
维护一个向量, 有三种操作
- 将第$i$个数加1
- 将第$i$个数置0
- 交换第$i$个数和第$j$个数
Solution
矩阵乘法/快速幂
Implementation
我们将向量写成列向量的形式.
为了支持+1操作需要将向量加一维, 这一维始终是1.
有一个坑:
当若干个转移矩阵$A_1, A_2, dots, A_n$(方阵)依次作用于某个向量时, 这些向量的合向量$B$应当写成
$$B=A_ncdot A_{n-1} cdot dots cdot A_{1}$$
这一点很容易弄反.
一开始我仿照《挑战程序设计竞赛》上的写法,用vector<vector<int>>
表示矩阵,结果TLE.
无奈改成二维数组,轻松AC。还是要慎用STL。