题目分析

  1. #include<bits/stdc++.h>
  2. #define MO 998244353
  3. const int maxn = ;
  4.  
  5. struct Matrix
  6. {
  7. int a[][];
  8. void init(int c, int spe)
  9. {
  10. // printf("spe:%d\n",spe);
  11. a[][] = c, a[][] = , a[][] = 1ll*spe*c%MO;
  12. a[][] = , a[][] = , a[][] = ;
  13. a[][] = , a[][] = , a[][] = ;
  14. }
  15. }f[maxn<<];
  16. int n,m;
  17.  
  18. int read()
  19. {
  20. char ch = getchar();
  21. int num = , fl = ;
  22. for (; !isdigit(ch); ch=getchar())
  23. if (ch=='-') fl = -;
  24. for (; isdigit(ch); ch=getchar())
  25. num = (num<<)+(num<<)+ch-;
  26. return num*fl;
  27. }
  28. int qmi(int a, int b)
  29. {
  30. if (b <= -) return ;
  31. int ret = ;
  32. for (; b; b>>=,a=1ll*a*a%MO)
  33. if (b&) ret = 1ll*ret*a%MO;
  34. return ret;
  35. }
  36. void debug(Matrix t)
  37. {
  38. puts("------------------------------------");
  39. for (int i=; i<; i++, puts(""))
  40. for (int j=; j<; j++) printf("%d ",t.a[i][j]);
  41. puts("------------------------------------");
  42. }
  43. Matrix mult(Matrix a, Matrix b)
  44. {
  45. Matrix ret;
  46. ret.a[][] = , ret.a[][] = , ret.a[][] = ;
  47. ret.a[][] = , ret.a[][] = , ret.a[][] = ;
  48. ret.a[][] = , ret.a[][] = , ret.a[][] = ;
  49. // debug(a);
  50. // debug(b);
  51. for (int k=; k<; k++)
  52. for (int i=; i<; i++)
  53. for (int j=; j<; j++)
  54. ret.a[i][j] = (ret.a[i][j]+1ll*a.a[i][k]*b.a[k][j]%MO)%MO;
  55. // debug(ret);
  56. // puts("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
  57. return ret;
  58. }
  59. void pushup(int rt)
  60. {
  61. f[rt] = mult(f[rt<<], f[rt<<|]);
  62. }
  63. void build(int rt, int l, int r)
  64. {
  65. if (l==r) f[rt].init(read(), qmi(, l-));
  66. else{
  67. int mid = (l+r)>>;
  68. build(rt<<, l, mid);
  69. build(rt<<|, mid+, r);
  70. pushup(rt);
  71. }
  72. }
  73. void modify(int rt, int l, int r, int c, int w)
  74. {
  75. if (l==r) f[rt].init(w, qmi(, l-));
  76. else{
  77. int mid = (l+r)>>;
  78. if (c <= mid) modify(rt<<, l, mid, c, w);
  79. else modify(rt<<|, mid+, r, c, w);
  80. pushup(rt);
  81. }
  82. }
  83. void calc()
  84. {
  85. Matrix ans;
  86. ans.a[][] = , ans.a[][] = , ans.a[][] = ;
  87. ans.a[][] = , ans.a[][] = , ans.a[][] = ;
  88. ans.a[][] = , ans.a[][] = , ans.a[][] = ;
  89. ans = mult(ans, f[]);
  90. printf("%d\n",(ans.a[][]+ans.a[][])%MO);
  91. }
  92. int main()
  93. {
  94. freopen("rseq.in","r",stdin);
  95. freopen("rseq.out","w",stdout);
  96. n = read(), m = read();
  97. build(, , n), calc();
  98. for (int i=; i<=m; i++)
  99. {
  100. int pos = read(), val = read();
  101. modify(, , n, pos, val), calc();
  102. }
  103. return ;
  104. }

【线段树 矩阵乘法dp】8.rseq的更多相关文章

  1. MAZE(2019年牛客多校第二场E题+线段树+矩阵乘法)

    题目链接 传送门 题意 在一张\(n\times m\)的矩阵里面,你每次可以往左右和下三个方向移动(不能回到上一次所在的格子),\(1\)表示这个位置是墙,\(0\)为空地. 现在有\(q\)次操作 ...

  2. 【Codeforces718C】Sasha and Array 线段树 + 矩阵乘法

    C. Sasha and Array time limit per test:5 seconds memory limit per test:256 megabytes input:standard ...

  3. hdu 5068(线段树+矩阵乘法)

    矩阵乘法来进行所有路径的运算, 线段树来查询修改. 关键还是矩阵乘法的结合律. Harry And Math Teacher Time Limit: 5000/3000 MS (Java/Others ...

  4. 【对不同形式矩阵的总结】WC 2009 最短路径问题(线段树+矩阵乘法)

    题意 ​ 题目链接:https://www.luogu.org/problem/P4150 ​ 一个 \(6\times n\) 的网格图,每个格点有一个初始权值.有两种操作: 修改一个格子的权值 求 ...

  5. CF718C Sasha and Array 线段树 + 矩阵乘法

    有两个操作: 将 $[l,r]$所有数 + $x$ 求 $\sum_{i=l}^{r}fib(i)$ $n=m=10^5$   直接求不好求,改成矩阵乘法的形式:  $a_{i}=M^x\times ...

  6. Wannafly Winter Camp Day8(Div1,onsite) E题 Souls-like Game 线段树 矩阵乘法

    目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog @ Problem:传送门  Portal  原题目描述在最下面.  简单的 ...

  7. LOJ2980 THUSC2017大魔法师(线段树+矩阵乘法)

    线段树每个节点维护(A,B,C,len)向量,操作即是将其乘上一个矩阵. #include<iostream> #include<cstdio> #include<cma ...

  8. HDU 5068 Harry And Math Teacher 线段树+矩阵乘法

    题意: 一栋楼有n层,每一层有2个门,每层的两个门和下一层之间的两个门之间各有一条路(共4条). 有两种操作: 0 x y : 输出第x层到第y层的路径数量. 1 x y z : 改变第x层 的 y门 ...

  9. [tsA1490][2013中国国家集训队第二次作业]osu![概率dp+线段树+矩阵乘法]

    这样的题解只能舔题解了,,,qaq 清橙资料里有.. #include <iostream> #include <cstdio> #include <cstdlib> ...

随机推荐

  1. 洛谷 题解 P1353 【[USACO08JAN]跑步Running】

    动态规划 状态 dp[i][j]表示第i分钟疲劳值为j的最大值 初始 全部都为一个最小值"0" 转移 考虑休息和走 如果当前疲劳值比时间要大,显然不可能出现这种情况 如果比时间小 ...

  2. [转帖]System Dynamic Management Views

    System Dynamic Management Views https://docs.microsoft.com/en-us/sql/relational-databases/system-dyn ...

  3. go 二进制数据处理

    以下是利用标准库binary来进行编解码 编码 ①使用bytes.Buffer来存储编码生成的串②使用binary.Write来编码存储在①的buf中 package main import ( &q ...

  4. Python 解leetcode:3. Longest Substring Without Repeating Characters

    题目描述:求一个字符串的不含重复字符的最长连续子串的长度: 思路: 使用一个哈希表保存字符出现的位置: 使用left和right分别表示子串的最左和最右字符的下标: 遍历字符串,如果当前字符在哈希表中 ...

  5. redis集群(多机)分布

    一.实现原理 一致性哈希算法(Consistent Hashing): http://www.zsythink.net/archives/1182 二.配置两个redis服务,端口号要不一致 三.代码 ...

  6. Python基础 第三章 使用字符串(3)字符串方法&本章小结

    字符串的方法非常之多,重点学习一些最有用的,完整的字符串方法参见<Python基础教程(第三版)>附录B. 模块string,虽然风头已小,但其包含了一些字符串方法中没有的常量和函数,故将 ...

  7. 【AC自动机】最短母串

    [题目链接] https://loj.ac/problem/10061 [题意] 给定 n 个字符串 S1-Sn,要求找到一个最短的字符串 T,使得这 n 个字符串都是 T 的子串. [题解] 类似于 ...

  8. Java 字符串比较

    1.字符串比较 compareTo() 方法用于两种方式的比较: 字符串与对象进行比较. 按字典顺序比较两个字符串. 返回值 返回值是整型,它是先比较对应字符的大小(ASCII码顺序),如果第一个字符 ...

  9. Go入门所踩过的坑:cannot find package "" in any of

    问题:cannot find package "" in any of.现已按照博客解决,分享一种自己踩得坑欢迎大神指导交流! 首先使用go env查看当前环境变量,新手入门出现找 ...

  10. 轻松搭建CAS 5.x系列(2)-搭建HTTPS的SSO SERVER端

    概要说明 CAS要求,必须使用HTTPS的服务,否则就只等实现登录,无法实现单点登录.科普下HTTPS,网站有HTTP和HTTPS两种协议.HTTP是浏览器到网站之间是明文传输,比如你输入帐号名和密码 ...