题目分析

#include<bits/stdc++.h>
#define MO 998244353
const int maxn = ; struct Matrix
{
int a[][];
void init(int c, int spe)
{
// printf("spe:%d\n",spe);
a[][] = c, a[][] = , a[][] = 1ll*spe*c%MO;
a[][] = , a[][] = , a[][] = ;
a[][] = , a[][] = , a[][] = ;
}
}f[maxn<<];
int n,m; int read()
{
char ch = getchar();
int num = , fl = ;
for (; !isdigit(ch); ch=getchar())
if (ch=='-') fl = -;
for (; isdigit(ch); ch=getchar())
num = (num<<)+(num<<)+ch-;
return num*fl;
}
int qmi(int a, int b)
{
if (b <= -) return ;
int ret = ;
for (; b; b>>=,a=1ll*a*a%MO)
if (b&) ret = 1ll*ret*a%MO;
return ret;
}
void debug(Matrix t)
{
puts("------------------------------------");
for (int i=; i<; i++, puts(""))
for (int j=; j<; j++) printf("%d ",t.a[i][j]);
puts("------------------------------------");
}
Matrix mult(Matrix a, Matrix b)
{
Matrix ret;
ret.a[][] = , ret.a[][] = , ret.a[][] = ;
ret.a[][] = , ret.a[][] = , ret.a[][] = ;
ret.a[][] = , ret.a[][] = , ret.a[][] = ;
// debug(a);
// debug(b);
for (int k=; k<; k++)
for (int i=; i<; i++)
for (int j=; j<; j++)
ret.a[i][j] = (ret.a[i][j]+1ll*a.a[i][k]*b.a[k][j]%MO)%MO;
// debug(ret);
// puts("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
return ret;
}
void pushup(int rt)
{
f[rt] = mult(f[rt<<], f[rt<<|]);
}
void build(int rt, int l, int r)
{
if (l==r) f[rt].init(read(), qmi(, l-));
else{
int mid = (l+r)>>;
build(rt<<, l, mid);
build(rt<<|, mid+, r);
pushup(rt);
}
}
void modify(int rt, int l, int r, int c, int w)
{
if (l==r) f[rt].init(w, qmi(, l-));
else{
int mid = (l+r)>>;
if (c <= mid) modify(rt<<, l, mid, c, w);
else modify(rt<<|, mid+, r, c, w);
pushup(rt);
}
}
void calc()
{
Matrix ans;
ans.a[][] = , ans.a[][] = , ans.a[][] = ;
ans.a[][] = , ans.a[][] = , ans.a[][] = ;
ans.a[][] = , ans.a[][] = , ans.a[][] = ;
ans = mult(ans, f[]);
printf("%d\n",(ans.a[][]+ans.a[][])%MO);
}
int main()
{
freopen("rseq.in","r",stdin);
freopen("rseq.out","w",stdout);
n = read(), m = read();
build(, , n), calc();
for (int i=; i<=m; i++)
{
int pos = read(), val = read();
modify(, , n, pos, val), calc();
}
return ;
}

【线段树 矩阵乘法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. select示例

    #include <sys/select.h> #include <sys/time.h> #include <sys/types.h> #include < ...

  2. Nginx05---负载均衡 upsteam

    参考   https://www.cnblogs.com/linjiqin/p/5494783.html

  3. Mybaties配置一对多关系sql实例

    <!-- resultMap中的type表示返回什么类型的对象 --> <resultMap id="BaseGoods" type="com.cn.h ...

  4. 【Python基础】02_Python中变量的输入输出

    1.变量的输入: input函数: input() input("请输入银行卡密码") password = input("请输入银行卡密码") 变量名 = i ...

  5. MyBatis 源码篇-插件模块

    本章主要描述 MyBatis 插件模块的原理,从以下两点出发: MyBatis 是如何加载插件配置的? MyBatis 是如何实现用户使用自定义拦截器对 SQL 语句执行过程中的某一点进行拦截的? 示 ...

  6. java7:核心技术与最佳实践读书笔记——对象生命周期

    流程:字节码文件(.class) -> 类加载 -> 类链接 -> 类初始化 -> 对象初始化 -> 对象创建 -> 对象使用 -> 对象回收 . 1.Jav ...

  7. lesson10总结

    package lesson10; public class Fa { String name="I am Fa"; static{  System.out.println(&qu ...

  8. c# 图文添加文字斜水印 优化

    之前一篇给图片加水印的功能,加出来水印的图片位置有一点问题,并且如果图片分辨率有变动的话,水印会有层次不齐的问题. 目前只能优化到增加一条居中显示的斜水印,在不同分辨率不同大小的图片中,都能保证文字水 ...

  9. 【Android】二、HelloWorld

    1. 按照该网址写HelloWorld 例子   http://www.runoob.com/android/android-hello-world-example.html 2.点击 make pr ...

  10. 03 - Mongodb数据查询 | Mongodb

    1.基本查询 ①方法find():查询 db.集合名称.find({条件文档}) ②方法findOne():查询,只返回第一个 db.集合名称.findOne({条件文档}) ③方法pretty(): ...