当前位置: 首页 > news >正文

I. 对线

https://codeforces.com/gym/103186/problem/I

一开始感觉操作挺复杂的

但是写过Chino的数列 - 洛谷 发现可以通过矩阵来实现swap操作,就想能不能用线段树维护矩阵来写

有三排兵线,我们维护区间和,因此初始矩阵就有了\begin{bmatrix} val1 &val2 &val3 &len \end{bmatrix}

接下来分析每个操作的转移矩阵 (可以通过关系式推导或者随意设置一个转移矩阵,计算后看是否满足关系式)

op=1\begin{bmatrix} 1 &0 &0 &0 \\ 0& 1 &0 &0 \\ 0& 0 & 1& 0\\ v& v & v & 1 \end{bmatrix} ,区间加那一排在排下面赋值v

op=2\begin{bmatrix} 1 &0 &0 &0 \\ 0& 1 &0 &0 \\ 0& 0 & 1& 0\\ 0& 0 & 0 & 1 \end{bmatrix}在这个矩阵的基础下,swap(1,2)有\begin{bmatrix} 0&1 &0 &0 \\ 1& 0 &0 &0 \\ 0& 0 & 1& 0\\ 0& 0 & 0 & 1 \end{bmatrix}

op=3\begin{bmatrix} 1 &0 &0 &0 \\ 0& 1 &0 &0 \\ 0& 0 & 1& 0\\ 0& 0 & 0 & 1 \end{bmatrix}在这个矩阵的基础下,1要得到3的分身有\begin{bmatrix} 1 &0 &0 &0 \\ 0& 1 &0 &0 \\ 1& 0 & 1& 0\\ 0& 0 & 0 & 1 \end{bmatrix}

也就是val1=val1+val3,也就是说这个操作可以累加的,因此不是给矩阵这个位置赋值1,而是++一次(!)

虽然12s,但是我还是要卡

建议不要写结构体,加快读,对矩阵乘法进行优化,以及懒标记的下传判断优化

// Problem: I. 对线
// Contest: Codeforces - The 2021 Shanghai Collegiate Programming Contest
// URL: https://codeforces.com/gym/103186/problem/I
// Memory Limit: 1024 MB
// Time Limit: 12000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include<iostream>
using namespace std;
typedef long long ll;
const int N=3e5+9;
const int mod=998244353;
namespace Lan {inline string sread() {string s=" ";char e=getchar();while(e==' '||e=='\n')e=getchar();while(e!=' '&&e!='\n')s+=e,e=getchar();return s;}inline void swrite(string s){for(char e:s)putchar(e);printf("\n");}inline ll read() {ll x=0,y=1;char c=getchar();while(!isdigit(c)){if(c=='-')y=-1;c=getchar();}while(isdigit(c)){x=(x<<3)+(x<<1)+(c^48);c=getchar();}return x*=y;}inline void write(ll x) {if(x<0){x=-x,putchar('-');}ll sta[35],top=0;do sta[top++]=x%10,x/=10;while(x);while(top)putchar(sta[--top]+'0');}
}using namespace Lan;
int l=4;//长度
int vis[N<<2];
int add(int a, int b){return (a + b) % mod;}
int mul(int a, int b){return 1ll * a * b % mod;}
int sub(int a, int b){return ((a - b) % mod + mod) % mod;}
struct Matrix{              int m[5][5];//最多1e2Matrix() : m{} {}//构造函数,直接构造转移矩阵[5,5](0->5)void clear(){for(int i=1;i<=l;i++){for(int j=1;j<=l;j++){m[i][j]=0;}}}void reset(){//设置成单位矩阵for(int i=1;i<=l;i++){for(int j=1;j<=l;j++){m[i][j]=(i==j);}}}Matrix friend operator * (const Matrix &a,const Matrix &b){//重载*Matrix ans;ans.clear();for(int k=1;k<=l;k++){for(int j=1;j<=l;j++){for(int i=1;i<=l;i++){//乘法操作if(!a.m[i][k] || !b.m[k][j]){continue;}ans.m[i][j]=add(ans.m[i][j],mul(a.m[i][k]%mod,b.m[k][j]));}}}return ans;}   Matrix friend operator + (const Matrix &A,const Matrix &B){//重载+Matrix Ans;Ans.clear();for(int i=1;i<=l;i++){//l,转换矩阵大小Ans.m[1][i]=add(Ans.m[1][i],A.m[1][i]);Ans.m[1][i]=add(Ans.m[1][i],B.m[1][i]);}return Ans;}
}Tr,Cell,LIN,T;
struct SEG{struct node{int l,r;Matrix val;Matrix tag;}seg[N<<2];#define tl(id) id<<1#define tr(id) id<<1|1#define li inline#define pushup(id) seg[id].val=seg[tl(id)].val+seg[tr(id)].valli int inrange(int L,int R,int l,int r){return L>=l && R<=r;}li int outofrange(int L,int R,int l,int r){return L>r || l>R;}li void build(int id,int l,int r){seg[id].tag.reset();vis[id]=0;if(l==r){seg[id].val.m[1][4]=(r-l+1);return;}int mid=(l+r)>>1;build(tl(id),l,mid);build(tr(id),mid+1,r);pushup(id);}li void maketag(int id,int l,int r,Matrix x){seg[id].val=seg[id].val*x;seg[id].tag=seg[id].tag*x;vis[id]=1;}li void pushdown(int id,int l,int r){if(!vis[id]){return;}int mid=(l+r)>>1;maketag(tl(id),l,mid,seg[id].tag);maketag(tr(id),mid+1,r,seg[id].tag);seg[id].tag.reset();vis[id]=0;}li Matrix query(int id,int L,int R,int l,int r){if(inrange(L,R,l,r)){return seg[id].val;}else if(!outofrange(L,R,l,r)){int mid=(L+R)>>1;pushdown(id,L,R);return query(tl(id),L,mid,l,r)+query(tr(id),mid+1,R,l,r);}else{return LIN;}}li void modify(int id,int L,int R,int l,int r,Matrix x){if(inrange(L,R,l,r)){maketag(id,L,R,x);}else if(!outofrange(L,R,l,r)){int mid=(L+R)>>1;pushdown(id,L,R);modify(tl(id),L,mid,l,r,x);modify(tr(id),mid+1,R,l,r,x);pushup(id);}}
}tr;
#define node SEG::node
int main(){int n,q;n=read(),q=read();LIN.clear();Cell.reset();  	tr.build(1,1,n);for(int i=1;i<=q;i++){int op;op=read();if(op==0){int x,l,r;x=read(),l=read(),r=read();cout<<tr.query(1,1,n,l,r).m[1][x]%mod<<'\n';}else if(op==1){int x,l,r,y;x=read(),l=read(),r=read(),y=read();T.reset();T.m[4][x]=y;tr.modify(1,1,n,l,r,T);}else if(op==2){int x,y,l,r;x=read(),y=read(),l=read(),r=read();T.reset();swap(T.m[y][x],T.m[x][x]);  swap(T.m[x][y],T.m[y][y]);tr.modify(1,1,n,l,r,T); }else{int x,y,l,r;x=read(),y=read(),l=read(),r=read();T.reset();T.m[x][y]++;tr.modify(1,1,n,l,r,T);}}return 0;
}

勉强卡过,结构体比较美观()

相关文章:

I. 对线

https://codeforces.com/gym/103186/problem/I 一开始感觉操作挺复杂的 但是写过Chino的数列 - 洛谷 发现可以通过矩阵来实现swap操作&#xff0c;就想能不能用线段树维护矩阵来写 有三排兵线&#xff0c;我们维护区间和&#xff0c;因此初始矩阵就有了 接下来分析每个操作的…...

Topsis法模型(评价类问题)

目录 本文章内容参考&#xff1a; 一. 概念 二. 特点和适用范围 三. 实现步骤 四. 代码实现 本文章内容参考&#xff1a; TOPSIS法模型讲解(附matlab和python代码) 【数学建模快速入门】数模加油站 江北_哔哩哔哩_bilibili 一. 概念 TOPSIS&#xff08;Technique for O…...

HPA 与pod调度

HPA 自动更新工作负载资源&#xff08;例如 Deployment 或者 StatefulSet&#xff09;&#xff0c; 目的是自动扩缩工作负载以满足需求。 绑定到deploy上&#xff0c;控制pod 依托于metrics-server HorizontalPodAutoscaler 水平pod自动扩缩&#xff1a;意味着对增加的负…...

jupyter下载

https://blog.csdn.net/qq_48372575/article/details/125630622 我下面是CPU运行的&#xff0c;GPU链接在上面 Anaconda下载 https://docs.anaconda.com/miniconda/miniconda-other-installer-links/ 参考链接&#xff1a; https://blog.csdn.net/qq_48372575/article/detai…...

蓝桥杯双周赛 第 16 场 小白入门赛 解题报告 | 珂学家 | 七夕娱乐场

前言 题解 因为这场七夕节&#xff0c;所以出的特别友好。 整体还是偏思维。 T6 额外提供组合数学解&#xff0c;还是蛮有趣的。 A. 喜鹊罢工 题型: 签到 365 可以有多少个 7 组成 365可以有多少个7组成 365可以有多少个7组成 向上取整即可 #include <iostream>usi…...

[C++] 深入理解面向对象编程特性 : 继承

文章目录 继承的概念与定义继承的定义定义格式不同继承方式与继承的基类中访问限定符间的影响C中的继承和访问控制总结父类的private成员在子类中的访问限制protected成员的使用场景成员访问方式总结继承方式的默认值实际应用中的继承方式 示例代码 OOP中类之间的关系“is a” …...

汇昌联信科技做拼多多电商怎么引流?

在互联网经济高速发展的今天&#xff0c;电商平台如雨后春笋般涌现&#xff0c;其中拼多多以其独特的社交电商模式迅速崛起。对于汇昌联信科技而言&#xff0c;如何在拼多多平台上有效引流&#xff0c;成为提升销量和品牌知名度的关键。本文将深入探讨汇昌联信科技在拼多多电商…...

公网ip和私网ip的区别

1.接入方式不同\n公网IP以公网连接Internet上的非保留地址&#xff0c;私网IP则是局域网上的IP&#xff0c;通过NAT才能够与公网进行通信。 2.特点不同\n公网IP由国际互联网络信息中心InterNIC负责,将IP地址分配给注册并向InterNIC提出申请的机构或组织。私网IP则是为节省可分…...

【开发踩坑】windows查看jvm gc信息

windows查看jvm gc信息 EZ 找出java进程PID 控制面板----搜索任务管理器---- 任务管理器----搜索 java----详细信息 这里PID是4856 cmd jstat gc面板 reference&#xff1a; jstat命令...

时间序列预测 | CEEMDAN+CNN+Transformer多变量时间序列预测(Python)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 时间序列预测 | CEEMDANCNNTransformer多变量时间序列预测&#xff08;Python&#xff09; 时间序列预测 创新点 多尺度特征提取&#xff1a;CEEMDAN将复杂的时间序列分解成多个IMFs&#xff0c;使得CNN和Transforme…...

vue3--实现vue2插件JSONPathPicker的路径获取功能

背景 最近在进行vue2项目升级为vue3。 在项目中需要获取json某些字段的路径&#xff0c;vue2中使用JSONPathPicker &#xff0c;但是该插件不支持vue3&#xff0c;vue3中也没有相应的模块有该功能。 实现目标&#xff1a; 原vue2中JSONPathPicker实现的功能&#xff1a; 查…...

SuccBI+低代码文档中心 — 可视化分析(仪表板)(上)

有关仪表板的设计器&#xff1a; 查询设置 由于仪表板的设计器是所见即所得的&#xff0c;可以将当前制作的内容和数据的查询结果实时展示在界面中&#xff0c;当引入到仪表板的模型数据量较大时&#xff0c;为了提高设计器界面的查询性能&#xff0c;提供了以下两种方法&…...

P3156 【深基15.例1】询问学号

昨天我发布了关于数据结构线性表的学习知识&#xff08;【数据结构】顺序表-CSDN博客&#xff09;。所谓“纸上得来终觉浅”&#xff0c;光看不练可不行&#xff0c;下面我们来看一下顺序表的习题。 题目链接 【深基15.例1】询问学号 - 洛谷 题目解读 题目描述了一个场景&…...

详解Xilinx FPGA高速串行收发器GTX/GTP(5)--详解8B10B编解码

目录 1、8B/10B编码是什么? 2、8B/10B编码的规则 3、两个例子 4、GTX的8B/10B编码 5、Verilog实现 文章总目录点这里:《FPGA接口与协议》专栏的说明与导航 1、8B/10B编码是什么? 简单来说,8B/10B编码就是将原本是8bits的数据,按照一定的规则扩展编码到10b…...

python 画多盘的写放大曲线方法

在服务器测试中我们经常会遇见客户要求画出每个SSD的WAF曲线&#xff0c;也就是写放大&#xff0c;通常的做法就是我们每隔10分钟记录一下每个SSD的host写入量和nand写入量&#xff0c;下面我们介绍一下python处理多盘的WAF的做法 如图所示 假设这是一个记录多盘的写入量信息的…...

计算机网络TCP/UDP知识点

这是一些在学习过程中关于计算机网络八股文的一些知识点记录&#xff1a; TCP/UDP TCP怎么保证可靠性 1.序列号&#xff0c;确认应答&#xff0c;超时重传 数据到达接收方&#xff0c;接收方需要发出一个确认应答&#xff0c;表示已经收到该数据段&#xff0c;并且确认序号…...

JavaScript 文档元素获取

目录 通过id获取文档元素 任务描述 相关知识 什么是DOM 文档元素 节点树 通过id获取文档元素 编程要求 通过类名获取文档元素 任务描述 相关知识 通过类名获取文档元素 编程要求 通过标签名获取文档元素 任务描述 相关知识 通过标签的名字获取文档元素 获取标…...

docker pull实现断点续传

问题背景 在使用Docker拉取DockerHub的镜像时&#xff0c;经常会出现网络不稳定的问题&#xff0c;这就导致拉取到一半的镜像会重新拉取&#xff0c;浪费时间。例如下面这种情况&#xff1a; 第二次拉取 这是一个网络中断的场景&#xff0c;第二次重新拉取的时候&#xff0c;同…...

无字母数字webshell之命令执行

源码 题目限制&#xff1a; webshell长度不超过35位除了不包含字母数字&#xff0c;还不能包含$和_ 这里使用php5来解决 可以围绕以下两点展开&#xff1a; shell下可以利用.来执行任意脚本Linux文件名支持用glob通配符代替 .或者叫period&#xff0c;它的作用和source一样…...

华为OD笔试

机试总分400。三道题目。100&#xff0b;100&#xff0b;200 华为od考试时间为150分钟&#xff0c;共有三道编程题&#xff0c;分数分别为100、100和200。如果你是目标院校&#xff08;查看目标院校请戳&#xff09;的话&#xff0c;及格线是160分&#xff0c;非目标院校则不确…...

Yi-Coder-1.5B快速体验:在Ollama上测试代码生成,结果出乎意料

Yi-Coder-1.5B快速体验&#xff1a;在Ollama上测试代码生成&#xff0c;结果出乎意料 最近在尝试各种本地部署的代码生成模型&#xff0c;想找一个既轻量又好用的工具。听说了零一万物开源的Yi-Coder-1.5B&#xff0c;只有15亿参数&#xff0c;但据说编程能力很强。我抱着试试…...

告别云端!用Ollama本地运行Yi-Coder-1.5B,保护代码隐私的终极方案

告别云端&#xff01;用Ollama本地运行Yi-Coder-1.5B&#xff0c;保护代码隐私的终极方案 1. 为什么选择本地代码生成模型&#xff1f; 在软件开发过程中&#xff0c;我们经常需要快速生成代码片段、解决编程问题或理解复杂逻辑。传统做法是使用云端代码生成服务&#xff0c;…...

Cuvil加速PyTorch模型推理:3大编译策略、2类IR优化陷阱与1套量化部署 checklist

第一章&#xff1a;Cuvil加速PyTorch模型推理&#xff1a;3大编译策略、2类IR优化陷阱与1套量化部署 checklistCuvil 是一个面向 PyTorch 生态的高性能模型编译器&#xff0c;专为边缘与云上低延迟推理场景设计。其核心能力在于将 TorchScript 或 FX Graph 表示的模型&#xff…...

Redis持久化:从AOF到RDB,如何实现数据不丢失?共

Qt是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本笔记将重点介绍QSpinBox数值微调组件的常用方法及灵活应用。…...

Claude Mythos Preview发布文章解读

1. 引入 anthropic于4月7日发布了Mythos Preview模型相关的说明文章&#xff08;参考1&#xff09;&#xff0c;并提出了目前不开放它的政策&#xff0c;还说了它在网安领域的能力很强。 那么&#xff0c;它的这些思路&#xff0c;是出于什么考虑呢&#xff1f; 2. 首次提到的内…...

Qwen3.5-9B行业应用:法律文书生成(起诉状/答辩状/代理词)+类案推送

Qwen3.5-9B行业应用&#xff1a;法律文书生成&#xff08;起诉状/答辩状/代理词&#xff09;类案推送 1. 法律AI助手的新选择 在法律行业&#xff0c;文书撰写和案例检索占据了律师大量工作时间。传统方式下&#xff0c;一份标准的起诉状可能需要3-4小时完成初稿&#xff0c;…...

OpenClaw+Qwen2.5-VL-7B学术助手:论文图表解析与摘要生成

OpenClawQwen2.5-VL-7B学术助手&#xff1a;论文图表解析与摘要生成 1. 为什么需要AI学术助手 作为一名经常需要阅读大量文献的研究人员&#xff0c;我长期被三个问题困扰&#xff1a;首先是PDF论文中的图表数据提取困难&#xff0c;手动转录既耗时又容易出错&#xff1b;其次…...

Ostrakon-VL终端惊艳效果:像素UI下支持键盘快捷键(F5刷新/F6扫描)

Ostrakon-VL终端惊艳效果&#xff1a;像素UI下支持键盘快捷键&#xff08;F5刷新/F6扫描&#xff09; 1. 像素特工终端概览 这是一个基于Ostrakon-VL-8B多模态大模型开发的Web交互终端&#xff0c;专为零售与餐饮场景优化。与传统工业级UI不同&#xff0c;我们采用了高饱和度…...

告别在线转换!用PowerShell+FFmpeg批量把FLAC无损转成ALAC(附完整脚本)

打造高效音频工作流&#xff1a;PowerShellFFmpeg批量转换FLAC到ALAC全攻略 每次整理音乐库时&#xff0c;最头疼的就是格式兼容性问题。上周我帮朋友迁移他的2000多首FLAC音乐到苹果设备&#xff0c;原本打算用在线转换工具&#xff0c;结果光是上传就花了整整一天——这还不算…...

CSS如何优化大型网站样式_利用BEM架构保持代码条理性

BEM通过命名约束避免样式冲突和维护灾难&#xff1a;Block&#xff08;如card&#xff09;为独立单元&#xff0c;Element&#xff08;如card__title&#xff09;须依附Block&#xff0c;Modifier&#xff08;如card--featured&#xff09;表状态且不单独使用。为什么BEM能避免…...