题目传送门

操作二要求的东西是一个循环迭代的东西,手推相邻两项找下规律,发现相邻两项的分子分母间含有线性关系,考虑用矩阵乘法求解。对于 \([1,n]\)的询问,从后往前倒推, \(x_{n-1}=a_{n-1} \times x_{n} + y_{n}\), \(y_{n-1}=x_{n}\),其中 \(x_{n}=a_{n},y_{n}=1\), \(x_{i},y_{i}\)分别代表从后往前计算到第 \(i\)项时的分子分母,第 \(i\)个数的初始矩阵为 \(\left[ \begin{matrix} 0 & 1 \\ 1 & a_{i} \end{matrix} \right]\),这样从后往前乘,最终得到的矩阵的 \(matrix[1][2]\)即为 \(y\)值, \(matrix[2][2]\)即为 \(x\)值。所以做一下前缀积即可,用数组 \(pre\)表示。对于 \([l,r]\)的询问,计算逆矩阵前缀积,用数组 \(inv\_pre\)表示,第 \(i\)项的初始逆矩阵为 \(\left[ \begin{matrix} -a_{i} & 1 \\ 1 & 0 \end{matrix} \right]\)。答案等于 \(inv\_pre[l-1] \times pre[r]\),因为矩阵乘法不满足交换律,所以注意乘的顺序,\(inv\_pre\)要倒着乘,具体看代码。

#include<cstdio>
#include<cstring>
const int mod = 998244353;
const int N = 1e6 + 5; struct Matrix{
int a[3][3];
Matrix() { memset(a, 0, sizeof(a)); }
Matrix operator *(const Matrix &ret)const{
Matrix ans;
for(int k = 1; k <= 2; ++k)
for(int i = 1; i <= 2; ++i)
for(int t = 1; t <= 2; ++t)
ans.a[i][t] = (ans.a[i][t] + 1LL * a[i][k] * ret.a[k][t]) % mod;
return ans;
}
}pre[N], inv_pre[N]; int n, m, type, cnt; void add(int pos, int num){
pre[pos].a[1][2] = pre[pos].a[2][1] = 1;
pre[pos].a[2][2] = num;
inv_pre[pos].a[1][2] = inv_pre[pos].a[2][1] = 1;
inv_pre[pos].a[1][1] = mod - num;
pre[pos] = pre[pos - 1] * pre[pos];
inv_pre[pos] = inv_pre[pos] * inv_pre[pos - 1]; // 倒着乘
} int main(){
scanf("%d%d%d", &n, &m, &type); cnt = n;
pre[0].a[1][1] = pre[0].a[2][2] = 1;
inv_pre[0].a[1][1] = inv_pre[0].a[2][2] = 1;
for(int i = 1, x; i <= n; ++i){
scanf("%d", &x);
add(i, x);
}
int opt, l, r, x, last = 0;
while(m--){
scanf("%d", &opt);
if(opt == 1){
scanf("%d", &x);
if(type) x ^= last;
add(++cnt, x);
}
else{
scanf("%d%d", &l, &r);
if(type) l ^= last, r ^= last;
Matrix p = inv_pre[l - 1] * pre[r];
int x = p.a[2][2], y = p.a[1][2];
last = x ^ y;
printf("%d %d\n", x, y);
}
}
return 0;
}

【LOJ NOI Round#2 Day1 T1】单枪匹马(矩阵乘法)的更多相关文章

  1. codevs矩阵乘法系列

    T1:矩阵乘法板子题,练手. #include <map> #include <set> #include <cmath> #include <ctime&g ...

  2. LibreOJ NOI Round #2 Day 1

    LibreOJ NOI Round #2 Day 1 T1: 别被定义弄晕了 反着做,A->1/A+B 取倒数没法做,所以变成a/b,维护2*2的矩阵 区间?不用线段树,不用倍增 存在逆矩阵,直 ...

  3. CH Round #30 摆花[矩阵乘法]

    摆花 CH Round #30 - 清明欢乐赛 背景及描述 艺术馆门前将摆出许多花,一共有n个位置排成一排,每个位置可以摆花也可以不摆花.有些花如果摆在相邻的位置(隔着一个空的位置不算相邻),就不好看 ...

  4. loj#2128. 「HAOI2015」数字串拆分 矩阵乘法

    目录 题目链接 题解 代码 题目链接 loj#2128. 「HAOI2015」数字串拆分 题解 \(f(s)\)对于\(f(i) = \sum_{j = i - m}^{i - 1}f(j)\) 这个 ...

  5. 【LOJ511】[LibreOJ NOI Round #1]验题(动态DP)

    我这道题写了整!整!三!天! 我要一定要写这篇博客来表达我复!杂!的!心!情! 题目 LOJ511 官方题解(这个题解似乎不是很详细,我膜 std 才看懂的) 调这道题验证了我校某人的一句话:调题是一 ...

  6. 「LibreOJ NOI Round #2」不等关系

    「LibreOJ NOI Round #2」不等关系 解题思路 令 \(F(k)\) 为恰好有 \(k\) 个大于号不满足的答案,\(G(k)\) 表示钦点了 \(k\) 个大于号不满足,剩下随便填的 ...

  7. LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿

    二次联通门 : LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿 /* LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿 dp 记录一下前驱 ...

  8. Noip2011 提高组 Day1 T1 铺地毯 + Day2 T1 计算系数

    Day1 T1 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小 ...

  9. Noip2014 提高组 Day1 T1 生活大爆炸版石头剪刀布 + Day2 T1 无线网络发射器选址

    Day1 T1 题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一样,则不分胜负.在<生活大爆炸>第二季第8 集中出现了一种石头剪刀布的升级版游戏. 升 ...

  10. Codevs 1287 矩阵乘法&&Noi.cn 09:矩阵乘法(矩阵乘法练手题)

    1287 矩阵乘法  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 小明最近在为线性代数而头疼, ...

随机推荐

  1. Unity的AssetPostprocessor之Model:深入解析与实用案例 1

    Unity AssetPostprocessor模型相关函数详解 在Unity中,AssetPostprocessor是一个非常有用的工具,它可以在导入资源时自动执行一些操作.在本文中,我们将重点介绍 ...

  2. stencilJs学习之构建 Drawer 组件

    前言 在之前的学习中,我们已经掌握了 stencilJs 中的一些核心概念和基础知识,如装饰器 Prop.State.Event.Listen.Method.Component 以及生命周期方法.这些 ...

  3. QA|20221002|SecureCRT中退格键变成了^H

    原因:backspace键和delete键的键码映射问题   解决办法一:要使用回删键(backspace)时,同时按住ctrl键   解决办法二:重新设置码值映射关系.比如SecureCRT中,会话 ...

  4. Vue.js 官方脚手架 create-vue 是怎么实现的?

    Vue.js 官方脚手架 create-vue 是怎么实现的? 摘要 本文共分为四个部分,系统解析了vue.js 官方脚手架 create-vue 的实现细节. 第一部分主要是一些准备工作,如源码下载 ...

  5. KRPano多屏互动原理

    KRPano可以实现多个屏幕之间的同步显示,主要应用到Websocket技术进行通信. 在控制端,我们需要发送当前KRPano场景的实时的视角和场景信息,可以使用如下的代码: embedpano({ ...

  6. 探秘移动端BI:发展历程与应用前景解析

    什么是移动端BI 维基百科 上对于 移动端商业智能的定义是这样的 > Mobile BI is a system that presents historical and real-time i ...

  7. 【RocketMQ】事务实现原理总结

    RocketMQ事务的使用场景 单体架构下的事务 在单体系统的开发过程中,假如某个场景下需要对数据库的多张表进行操作,为了保证数据的一致性,一般会使用事务,将所有的操作全部提交或者在出错的时候全部回滚 ...

  8. 蓝桥杯真题——第十三届蓝桥杯大赛软件赛省赛 Python 大学 B 组

  9. 爬虫系列——requests

    文章目录 一 介绍 二 基于GET请求 三 基于POST请求 四 响应Response 五 高级用法 一 介绍 介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,reques ...

  10. 背景图片随机API

    在美化博客园的时候,遇到了一个问题:博客背景图片只支持一张图片,看到有道友说可以用API随机图片. 于是就有了这篇文章. 本文主要整理了一些随机图片API,希望对你有帮助. 岁月小筑 https:// ...