题目分析

#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. Cron 表达式学习

    1.7个子域的说明 cron 的表达式是字符串,实际上是由七子表达式(从左到右),描述个别细节的时间表.这些子表达式是分开的空白. 顺序(从左到右) 子串 有效数字 有效字符 1 Seconds(秒) ...

  2. eNSP使用-不同网段的互联

    就像下面这个场景: 1.基本配置 先点击左上角的——新建 然后咱们把要用的设备都拖到面板上去 成品就是这样的: 点击这个为他们添加备注 我们来配置一下实验编址 右键单击PC1设置(PC2同理,就不多演 ...

  3. centos7:ssh免密登陆设置及常见错误

    目录 一.免密登录设置 二.常见错误 三.CentOS7再ssh-copy-id时的错误 一.免密登录设置 1.使用root用户登录,进入到目录/root/.ssh 2.执行命令:ssh-keygen ...

  4. PTA(Advanced Level)1044.Shopping in Mars

    Shopping in Mars is quite a different experience. The Mars people pay by chained diamonds. Each diam ...

  5. SQL SERVER 根据字段名称批量设置为主键

    --设置主键 --alter table 你的表名 add constraint pk_s primary key (id) SELECT 'alter table ' + TABLE_NAME + ...

  6. MQ解决消息重发--做到幂等性

    一.MQ消息发送 1.发送端MQ-client(消息生产者:Producer)将消息发送给MQ-server: 2.MQ-server将消息落地: 3.MQ-server回ACK给MQ-client( ...

  7. 剑指offer45:扑克牌顺子

    1 题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话, ...

  8. python如何切割字符串

    python字符串的分割方法如下 str.split():字符串分割函数 通过指定分隔符对字符串进行切片,并返回分割后的字符串列表. 语法: str.split(s, num)[n] 参数说明: s: ...

  9. 【转载】Jmeter接口测试+压力测试

     jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单.因为jmeter是java开发的,所以运行的时候必须先要 ...

  10. 牛客 128A 礼物 (组合计数)

    大意: n种一元的奥利奥, m种2元的奥利奥, 求花恰好k元钱购买奥利奥的方案数. 可重组合问题, 直接dp即可. #include <iostream> #include <sst ...