[LOJ#2980][THUSCH2017]大魔法师(线段树+矩阵)
每个线段树维护一个行向量[A,B,C,len]分别是这个区间的A,B,C区间和与区间长度,转移显然。
以及此题卡常,稍微哪里写丑了就能100->45。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#define ls (x<<1)
#define rs (ls|1)
#define lson ls,L,mid
#define rson rs,mid+1,R
#define rep(i,l,r) for (int i=(l); i<=(r); i++)
using namespace std; const int N=,mod=;
int n,T,op,l,r,x,a[N],b[N],c[N]; int rd(){
int x=; char ch=getchar(); bool f=;
while (ch<'' || ch>'') f|=(ch=='-'),ch=getchar();
while (ch>='' && ch<='') x=x*+ch-'',ch=getchar();
return f ? -x : x;
} inline void inc(int &x,int y){ x+=y; x-=x>=mod ? mod : ; } struct Mat{
int a[][];
Mat (){ memset(a,,sizeof(a)); }
}I,A[N],v[N<<],tag[N<<]; Mat operator +(const Mat &a,const Mat &b){
Mat c=a;
rep(i,,) inc(c.a[][i],b.a[][i]);
return c;
} void put(int x,const Mat &a){
Mat nw;
rep(i,,) rep(k,,) if (a.a[i][k])
inc(nw.a[][k],1ll*v[x].a[][i]*a.a[i][k]%mod);
v[x]=nw; nw=Mat();
rep(i,,) rep(j,,) if (tag[x].a[i][j]) rep(k,,) if (a.a[j][k])
inc(nw.a[i][k],1ll*tag[x].a[i][j]*a.a[j][k]%mod);
tag[x]=nw;
} void push(int x){ put(ls,tag[x]); put(rs,tag[x]); tag[x]=I; } void build(int x,int L,int R){
tag[x]=I;
if (L==R){ v[x]=A[L]; return; }
int mid=(L+R)>>;
build(lson); build(rson); v[x]=v[ls]+v[rs];
} void mdf(int x,int L,int R,int l,int r,Mat &k){
if (L==l && r==R){ put(x,k); return; }
int mid=(L+R)>>; push(x);
if (r<=mid) mdf(lson,l,r,k);
else if (l>mid) mdf(rson,l,r,k);
else mdf(lson,l,mid,k),mdf(rson,mid+,r,k);
v[x]=v[ls]+v[rs];
} Mat que(int x,int L,int R,int l,int r){
if (L==l && r==R){ return v[x]; }
int mid=(L+R)>>; push(x);
if (r<=mid) return que(lson,l,r);
else if (l>mid) return que(rson,l,r);
else return que(lson,l,mid)+que(rson,mid+,r);
} int main(){
freopen("magic.in","r",stdin);
freopen("magic.out","w",stdout);
n=rd();
rep (i,,) I.a[i][i]=;
rep (i,,n){ A[i].a[][]=; rep (j,,) A[i].a[][j]=rd(); }
build(,,n);
for (T=rd(); T--; ){
op=rd(); l=rd(); r=rd(); Mat s=I;
if (op>= && op<=) x=rd();
if (op==){
Mat res=que(,,n,l,r);
printf("%d %d %d\n",res.a[][],res.a[][],res.a[][]);
continue;
}
if (op==) s.a[][]=;
if (op==) s.a[][]=;
if (op==) s.a[][]=;
if (op==) s.a[][]=x;
if (op==) s.a[][]=x;
if (op==) s.a[][]=,s.a[][]=x;
mdf(,,n,l,r,s);
}
return ;
}
[LOJ#2980][THUSCH2017]大魔法师(线段树+矩阵)的更多相关文章
- LOJ 2980 「THUSCH 2017」大魔法师——线段树
题目:https://loj.ac/problem/2980 线段树维护矩阵. 然后是 30 分.似乎是被卡常了?…… #include<cstdio> #include<cstri ...
- 【Loj#535】花火(线段树,扫描线)
[Loj#535]花火(线段树,扫描线) 题面 Loj 题解 首先如果不考虑交换任意两个数这个操作,答案就是逆序对的个数. 那么暴力就是枚举交换哪个两个数,然后用数据结构之类的东西动态维护逆序对. 但 ...
- 【LOJ#6029】市场(线段树)
[LOJ#6029]市场(线段树) 题面 LOJ 题解 看着就是一个需要势能分析的线段树. 不难发现就是把第二个整除操作化为减法. 考虑一下什么时候整除操作才能变成减法. 假设两个数为\(a,b\). ...
- Wannafly Winter Camp 2019.Day 8 div1 E.Souls-like Game(线段树 矩阵快速幂)
题目链接 \(998244353\)写成\(99824435\)然后调这个线段树模板1.5h= = 以后要注意常量啊啊啊 \(Description\) 每个位置有一个\(3\times3\)的矩阵, ...
- Loj #2570. 「ZJOI2017」线段树
Loj #2570. 「ZJOI2017」线段树 题目描述 线段树是九条可怜很喜欢的一个数据结构,它拥有着简单的结构.优秀的复杂度与强大的功能,因此可怜曾经花了很长时间研究线段树的一些性质. 最近可怜 ...
- LOJ2980 THUSC2017大魔法师(线段树+矩阵乘法)
线段树每个节点维护(A,B,C,len)向量,操作即是将其乘上一个矩阵. #include<iostream> #include<cstdio> #include<cma ...
- LOJ#3043.【ZJOI2019】 线段树 线段树,概率期望
原文链接www.cnblogs.com/zhouzhendong/p/ZJOI2019Day1T2.html 前言 在LOJ交了一下我的代码,发现它比选手机快将近 4 倍. 题解 对于线段树上每一个节 ...
- Manthan, Codefest 16 H. Fibonacci-ish II 大力出奇迹 莫队 线段树 矩阵
H. Fibonacci-ish II 题目连接: http://codeforces.com/contest/633/problem/H Description Yash is finally ti ...
- Z0J 3772 Calculate the Function 线段树+矩阵
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5235 这种题目居然没想到,一开始往矩阵快速幂想去了,因为之前跪了太多矩阵快速幂 ...
随机推荐
- 差分约束系统+(矩阵)思维(H - THE MATRIX PROBLEM HDU - 3666 )
题目链接:https://cn.vjudge.net/contest/276233#problem/H 题目大意:对于给定的矩阵 每一行除以ai 每一列除以bi 之后 数组的所有元素都还在那个L- ...
- 【连接查询】mySql多表连接查询与union与union all用法
1.准备两个表 表a: 结构: mysql> desc a; +-------+-------------+------+-----+---------+-------+ | Field | T ...
- java 压缩与解压
最近复习到IO,想找个案例做一做,恰好下载了许多图片压缩包,查看图片很不方便,所以打算用IO把图片都解压到同一个文件夹下.然后集中打包. 本例使用jdk自带的ZipInputStream和ZipOut ...
- 【算法】Base64编码
1.说明 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法. 2.编码 ASCII码 -> 十六进制码 -> ...
- 使用RegSetValueEx修改注册表时遇到的问题(转)
原文转自 http://blog.csdn.net/tracyzhongcf/article/details/4076870 1.今天在使用RegSetValueEx时发现一个问题: RegSetVa ...
- linux设备驱动之USB主机控制器驱动分析 【转】
转自:http://blog.chinaunix.net/uid-20543183-id-1930831.html ---------------------------------------- ...
- BZOJ4840 NEERC2016 Binary Code
Problem BZOJ Solution 可能是因为快要省选了,所以最近更博的频率好像高了点_(:зゝ∠)_ 每个字符串最多有两个状态,然后要满足一些依赖关系,考虑2sat.可以先把字符串的结束节点 ...
- php环境搭建 (window环境下 eclipse+Wampserver)
看了好多的环境搭建感觉好复杂呀,自己搞了一下简单的可以用了 php的手册 http://www.php.net/manual/zh/ 一,下载 1,下载eclipse http://www.ecl ...
- nfs挂载出错:mount.nfs: access denied by server while mounting
这个问题就是服务器不允许客户端去挂载,那么修改服务端的权限 $ sudo vi /etc/hosts.deny 文本末添加 ### NFS DAEMONS portmap: ALL lockd: AL ...
- 洛谷P2822组合数问题
传送门啦 15分暴力,但看题解说暴力分有30分. 就是找到公式,然后套公式.. #include <iostream> #include <cstdio> #include & ...