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

  线段树每个节点维护(A,B,C,len)向量,操作即是将其乘上一个矩阵。

#include<iostream> 
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 250010
#define P 998244353
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}
int n,m;
struct matrix
{int n,a[4][4];matrix operator *(const matrix&b) const{matrix c;c.n=n;memset(c.a,0,sizeof(c.a));for (int i=0;i<n;i++)for (int k=0;k<4;k++)for (int j=0;j<4;j++)c.a[i][j]=(c.a[i][j]+1ll*a[i][k]*b.a[k][j])%P;return c;}matrix operator +(const matrix&b) const{matrix c;c.n=n;memset(c.a,0,sizeof(c.a));for (int i=0;i<n;i++)for (int j=0;j<4;j++)c.a[i][j]=(a[i][j]+b.a[i][j])%P;return c;}void print(){cout<<n<<endl;for (int i=0;i<n;i++){	for (int j=0;j<4;j++)cout<<a[i][j]<<' ';cout<<endl;}}
};
int L[N<<2],R[N<<2],a[N],b[N],c[N];
bool islazy[N<<2];
matrix tree[N<<2],lazy[N<<2],f,I;
void up(int k){tree[k]=tree[k<<1]+tree[k<<1|1];}
void build(int k,int l,int r)
{L[k]=l,R[k]=r;lazy[k]=I;if (l==r) {tree[k].n=1,tree[k].a[0][0]=a[l],tree[k].a[0][1]=b[l],tree[k].a[0][2]=c[l],tree[k].a[0][3]=1;return;}int mid=l+r>>1;build(k<<1,l,mid);build(k<<1|1,mid+1,r);up(k);
}
void update(int k,matrix x)
{tree[k]=tree[k]*x;lazy[k]=lazy[k]*x;islazy[k]=1;
}
void down(int k)
{update(k<<1,lazy[k]);update(k<<1|1,lazy[k]);lazy[k]=I;islazy[k]=0;
}
void modify(int k,int l,int r,matrix x)
{if (L[k]==l&&R[k]==r) {update(k,x);return;}if (islazy[k]) down(k);int mid=L[k]+R[k]>>1;if (r<=mid) modify(k<<1,l,r,x);else if (l>mid) modify(k<<1|1,l,r,x);else modify(k<<1,l,mid,x),modify(k<<1|1,mid+1,r,x);up(k);
}
matrix query(int k,int l,int r)
{if (L[k]==l&&R[k]==r) return tree[k];if (islazy[k]) down(k);int mid=L[k]+R[k]>>1;if (r<=mid) return query(k<<1,l,r);else if (l>mid) return query(k<<1|1,l,r);else return query(k<<1,l,mid)+query(k<<1|1,mid+1,r);
}
signed main()
{
#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endifn=read();for (int i=1;i<=n;i++) a[i]=read(),b[i]=read(),c[i]=read();I.n=4;for (int i=0;i<4;i++) I.a[i][i]=1;build(1,1,n);f.n=4;m=read();for (int i=1;i<=m;i++){int op=read(),l=read(),r=read();memset(f.a,0,sizeof(f.a));if (op==1) f.a[0][0]=f.a[1][1]=f.a[2][2]=f.a[3][3]=f.a[1][0]=1;if (op==2) f.a[0][0]=f.a[1][1]=f.a[2][2]=f.a[3][3]=f.a[2][1]=1;if (op==3) f.a[0][0]=f.a[1][1]=f.a[2][2]=f.a[3][3]=f.a[0][2]=1;if (op==4) f.a[0][0]=f.a[1][1]=f.a[2][2]=f.a[3][3]=1,f.a[3][0]=read();if (op==5) f.a[0][0]=f.a[2][2]=f.a[3][3]=1,f.a[1][1]=read();if (op==6) f.a[0][0]=f.a[1][1]=f.a[3][3]=1,f.a[3][2]=read();if (op!=7) modify(1,l,r,f);else{matrix ans=query(1,l,r);printf("%d %d %d\n",ans.a[0][0],ans.a[0][1],ans.a[0][2]);}}return 0;//NOTICE LONG LONG!!!!!
}

  

转载于:https://www.cnblogs.com/Gloid/p/10636392.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在ECR上推送Spring Boot Docker映像

在先前的博客中&#xff0c;我们将Spring Boot应用程序与EC2集成在一起。 它是您可以在Amazon Web Services上进行的最原始的部署形式之一。 在本教程中&#xff0c;我们将使用我们的应用程序创建一个docker映像&#xff0c;该映像将存储到Amazon EC2容器注册表中 。 您需要安…

Linux信号处理机制

在Linux中&#xff0c;信号是进程间通讯的一种方式&#xff0c;它采用的是异步机制。当信号发送到某个进程中时&#xff0c;操作系统会中断该进程的正常流程&#xff0c;并进入相应的信号处理函数执行操作&#xff0c;完成后再回到中断的地方继续执行。 需要说明的是&#xff0…

pyspider爬虫框架

特点&#xff1a; 去重处理&#xff0c;结果监控&#xff0c;多进程处理&#xff0c;pyquery提取&#xff0c;错误重试&#xff0c;webUI管理&#xff0c;代码简洁&#xff0c;JS渲染 安装&#xff1a; anaconda里边没搜到pyspider&#xff0c;所以手动安装 查看pyspider的命令…

matlab subplot同时显示多幅图像

subplot是MATLAB中的函数。 使用方法&#xff1a;subplot&#xff08;m,n,p&#xff09;或者subplot&#xff08;m n p&#xff09;。 subplot是将多个图画到一个平面上的工具。其中&#xff0c;m表示是图排成m行&#xff0c;n表示图排成n列&#xff0c;也就是整个figure中有n个…

matlab var求方差

对二维数组a b1 var(a); % 按默认来求 b2 var(a, 0); % 默认的公式&#xff08;用N-1&#xff09; c1 var(a, 1); % 另外的公式&#xff08;用N&#xff09; d1 var(a, 0, 1); % 对每列操作&#xff08;用N-1&#xff09; d2 var(a, 0, 2); % 对每行操作&#xff08;…

1. git基础

1. 安装git sudo apt-get install git 2. 注册 git config --global user.name "Your Name" git config --global user.email "emailexample.com" 3. 创建版本库 mkdir learngit cd learngitgit init ##将这个目录初始化成…

国外persona用户画像_使用Mozilla Persona验证用户的指南

国外persona用户画像到目前为止&#xff0c;只有Twitter和Facebook身份验证&#xff0c;我决定将Mozilla Persona添加到我最新项目&#xff08; 计算机 &#xff0c;计算机生成的音乐&#xff09;的列表中。 为什么&#xff1f; 我喜欢尝试新事物 存储密码是一个艰巨的过程&a…

每天一个linux命令(41):ps命令

Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照&#xff0c;就是执行ps命令的那个时刻的那些进程&#xff0c;如果想要动态的显示进程信息&#xff0c;就可以使用top命令。 要对进程进行监测和控制&#x…

module.js:549 throw err;

解决方法&#xff1a; 1、有可能是拼写错误 2、未明原因。 &#xff08;1&#xff09;删除 node_modules 文件夹 &#xff08;2&#xff09;cnpm cache clean&#xff0c;不过提示错误就用 cnpm cache clean --force &#xff08;3&#xff09;cnpm install 如果还是显示错误就…

matlab zeros初始化为0矩阵

zeros为创建一个值为零的数组&#xff1b; 如matrix1zeros(4,5);%4*5的矩阵&#xff0c;矩阵中每个元素都为0 matrix2zeros(4,5,3);%4*5*3的数组&#xff0c;数组中每个元素都为0 下面举一个将图像存到数组的例子 对RGB图片1.jpg&#xff0c;2.jpg&#xff1b;大小为700*500…

在一个Java版本上运行Eclipse IDE,但在另一个Java版本上运行

Java™开发人员 &#xff08;和其他Java开发人员变体&#xff09;的Eclipse IDE本身就是用于构建Java应用程序的Java应用程序。 这种关系可能会让您的大脑有些奇怪。 Eclipse IDE几乎完全用Java编写&#xff0c;需要Java运行时环境&#xff08;JRE&#xff09;才能运行。 JRE仅…

1.6.4 分离原则: 策略同机制分离,接口同引擎分离

在Unix之失的讨论中&#xff0c;我们谈到过X系统的设计者在设计中的基本抉择是实行“机制&#xff0c;而不是策略”这种做法——使X成为一个通用图形引擎&#xff0c;而将用户界面风格留给工具包或者系统的其它层次来决定。这一点得以证明是正确的&#xff0c;因为策略和机制是…

十、LINQ查询之延迟执行

一、IEnumerable 来实现延迟加载 转载于:https://www.cnblogs.com/fger/p/10644549.html

matlab中“存储空间不足,无法处理此命令”

关于matlab中“存储空间不足&#xff0c;无法处理此命令” 前一段在matlab中绘制三维图片以及处理三维大数据时&#xff0c;电脑上出现了“存储空间不足&#xff0c;无法处理此命令”的提示&#xff0c;我便到网上查找一些相关的解决方案&#xff0c;但是很可惜&#xff0c;在…

inline用法详解

&#xff08;一&#xff09;inline函数&#xff08;摘自C Primer的第三版&#xff09; 在函数声明或定义中函数返回类型前加上关键字inline即把min&#xff08;&#xff09;指定为内联。 inline int min(int first, int secend) {/****/}; inline函数对编译器而言必须是可见的&…

matlab mat文件

如果想在matlab关闭后变量的值依然存在&#xff0c;就需要将变量保存在文件里&#xff0c;这里将变量保存为mat文件。 &#xff08;1&#xff09;将数组保存到mat文件 matrix1magic(4); save(matrix1.mat,matrix1); &#xff08;2&#xff09;需要使用mat文件时&#xff0c…

休眠日志:常见问题的提示和解决方案

如何通过适当的日志记录解决一些最常见的Hibernate问题&#xff1f; Hibernate的日志记录配置是一个重要但很少讨论的主题。 正确的配置可以帮助您在开发过程中发现潜在的问题&#xff0c;而错误的配置则可以在生产中导致严重的性能问题。 这就是我在新书《 Hibernate提示》中…

jdbc工具类2..0

一、创建外部文件 urljdbc:mysql:///qy66 useroot passwordroot drivercom.mysql.jdbc.Driver 二、创建工具类 package cn.zhouzhou;import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.net.URL; import java.sql.Con…

matlab 获取系统时间now,date

&#xff08;1&#xff09; 直接在命令窗输入now&#xff0c;返回数字&#xff0c;这个数字一般无意义&#xff1b;输入date&#xff0c;返回具体日期&#xff1a; >> now ans 7.3699e05 >> date ans 23-Oct-2017 &#xff08;2&#xff09;想要将时间精确…