atcoder 357 F Two Sequence Queries (线段树板子)

news2024/11/17 7:30:47

题目:

分析:

线段树

代码:

 

// Problem: F - Two Sequence Queries
// Contest: AtCoder - SuntoryProgrammingContest2024(AtCoder Beginner Contest 357)
// URL: https://atcoder.jp/contests/abc357/tasks/abc357_f
// Memory Limit: 1024 MB
// Time Limit: 5000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<bits/stdc++.h>

using namespace std;
#define int long long

const int N = 2e6+5;
const int mod=998244353;

int n,q;
int a[N],b[N];
int taga[N],tagb[N];
int sum[N],suma[N],sumb[N];

void addtag(int p,int pl,int pr,int d,int k){
	if(k==1){
		(suma[p]+=1ll*d*(pr-pl+1)%mod)%=mod;
		(sum[p]+=1ll*sumb[p]*d%mod)%=mod;
		(taga[p]+=d)%=mod;
	}
	else{
		(sumb[p]+=1ll*d*(pr-pl+1)%mod)%=mod;
		(sum[p]+=1ll*suma[p]*d%mod)%=mod;
		(tagb[p]+=d)%=mod;
	}
}

void pushup(int p){
	(suma[p]=(suma[p*2]+suma[p*2+1])%mod)%=mod;
	(sumb[p]=(sumb[p*2]+sumb[p*2+1])%mod)%=mod;
	(sum[p]=(sum[p*2]+sum[p*2+1])%mod)%=mod;
}

void pushdown(int p,int pl,int pr){
	int mid=(pl+pr)/2;
	if(taga[p]){
		addtag(p*2,pl,mid,taga[p],1);
		addtag(p*2+1,mid+1,pr,taga[p],1);
		taga[p]=0;
	}
	if(tagb[p]){
		addtag(p*2,pl,mid,tagb[p],2);
		addtag(p*2+1,mid+1,pr,tagb[p],2);
		tagb[p]=0;
	}
}

void build(int p,int pl,int pr){
	if(pl==pr){
		suma[p]=a[pl]%mod;
		sumb[p]=b[pl]%mod;
		sum[p]=1ll*a[pl]*b[pl]%mod;
		taga[p]=tagb[p]=0;
		return;
	}
	int mid=(pl+pr)/2;
	build(p*2,pl,mid);
	build(p*2+1,mid+1,pr);
	pushup(p);
	return;
}

void update(int l,int r,int p,int pl,int pr,int d,int k){
	if(l<=pl&&pr<=r){
		addtag(p,pl,pr,d,k);
		return;
	}
	int mid=(pl+pr)/2;
	pushdown(p,pl,pr);
	if(l<=mid){
		update(l,r,p*2,pl,mid,d,k);
	}
	if(r>mid){
		update(l,r,p*2+1,mid+1,pr,d,k);
	}
	pushup(p);
	return;
}

int query(int l,int r,int p,int pl,int pr){
	if(l<=pl&&pr<=r){
		return sum[p];
	}
	int mid=(pl+pr)/2;
	pushdown(p,pl,pr);
	int ans=0;
	if(l<=mid){
		(ans+=query(l,r,p*2,pl,mid))%=mod;
	}
	if(r>mid){
		(ans+=query(l,r,p*2+1,mid+1,pr))%=mod;
	}
	return ans;
}

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	
	cin>>n>>q;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++){
		cin>>b[i];
	}
	build(1,1,n);
	
	while(q--){
		int op,l,r,x;
		cin>>op;
		if(op==1){
			cin>>l>>r>>x;
			update(l,r,1,1,n,x,1);
		}
		else if(op==2){
			cin>>l>>r>>x;
			update(l,r,1,1,n,x,2);
		}
		else if(op==3){
			cin>>l>>r;
			cout<<query(l,r,1,1,n)<<"\n";
		}
	}

	
	return 0;	

}

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

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

相关文章

【最新鸿蒙应用开发】——Navigation路由管理

Navigation路由 1.引言 一多开发的项目适合使用Navigation进行统一的页面路由管理。Navigation还提供统一的标题栏、工具栏、菜单栏&#xff0c;并且自带导航返回功能。另外&#xff0c;Navigation还支持一些Router不支持的功能&#xff0c;比如&#xff1a;自带的路由拦截功…

运行时异常与一般异常的异同

运行时异常与一般异常的异同 1、运行时异常&#xff08;Runtime Exception&#xff09;1.1 特点 2、 一般异常&#xff08;Checked Exception&#xff09;2.1 特点 3、异同点总结3.1 相同点3.2 不同点 4、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷…

Transformer构架的优劣及常见问题

Transformer构架的优劣 优点 长距离依赖关系建模&#xff1a;通过自注意力机制&#xff0c;Transformer能够有效捕捉长距离依赖关系&#xff0c;适用于处理长序列和涉及远距离语义关系的任务。并行计算能力&#xff1a;多头注意力机制的并行计算特性极大提高了训练和推理效率…

卫星系统三种编码模式数字、模拟电视的区别

卫星系统三种编码模式 CCM----固定编码模式 ACM----自适应编码模式 VCM----可变编码调制模式 DTV——Digital TV &#xff08;即输入数字信号&#xff09;中文意思是数字电视,是指将活动图像、声音和数据&#xff0c;通过数字技术进行压缩、编码、传输、存储&#xff0c;实时…

图形学各种二维基础变换,原来线性代数还能这么用,太牛了

缩放变换 均匀缩放 若想将一个图形缩小0.5倍 若x乘上缩放值s等于x撇&#xff0c;y同理&#xff0c;则 x ′ s x y ′ s y \begin{aligned} & x^{\prime}s x \\ & y^{\prime}s y \end{aligned} ​x′sxy′sy​&#xff0c;这样就表示了x缩小了s倍&#xff0c;y也是…

UML中用例和用例图的概念

用例 用例模型的基本组成部分有用例、参与者&#xff08;或角色&#xff09;和系统。用例用于描述系统的功能&#xff0c;也就是从用户的角度来说&#xff0c;系统具体应包含哪些功能&#xff0c;从而帮助分析人员理解系统的行为。它是对系统功能的宏观的、整体的描述。一个完…

挑战杯 opencv python 深度学习垃圾图像分类系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; opencv python 深度学习垃圾分类系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 这是一个较为新颖的竞…

ubuntu 分区情况

ubuntu系统安装与分区指南 - Philbert - 博客园 (cnblogs.com)https://www.cnblogs.com/liangxuran/p/14872811.html 详解安装Ubuntu Linux系统时硬盘分区最合理的方法-腾讯云开发者社区-腾讯云 (tencent.com)https://cloud.tencent.com/developer/article/1711884

VScode免密链接ubuntu

Ubuntu 下载&#xff1a; sudo apt-get install openssh-serverps -e | grep sshd参考IP &#xff1a; ifconfig VScode配置 重新尝试连接&#xff0c;输入的密码是虚拟机用户密码 免密链接 Windows生成公钥 1、打开CMD 2、输入命令ssh-keygen 3、连续回车确认即可生成 …

矩阵式键盘最小需要多少个IO驱动

1. 概述 矩阵式键盘由于有其占用硬件资源少的优点有着极其广泛的应用&#xff0c;如PC键盘、电话按键、家用电器等等这类产品.矩阵键盘的基本原理如下所示&#xff08;仅是原理示例&#xff0c;实际实现上还会为每个按键加上防倒流的二极管解决“鬼影”问题&#xff09;&#x…

B端全局导航:左侧还是顶部?不是随随便便,有依据在。

一、什么是全局导航 B端系统的全局导航是指在B端系统中的主要导航菜单&#xff0c;它通常位于系统的顶部或左侧&#xff0c;提供了系统中各个模块和功能的入口。全局导航菜单可以帮助用户快速找到和访问系统中的各个功能模块&#xff0c;提高系统的可用性和用户体验。 全局导航…

【python】PyQt5可视化开发,鼠标键盘实现联动界面交互逻辑与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

稀疏建模介绍,详解机器学习知识

目录 一、什么是机器学习&#xff1f;二、稀疏建模介绍三、Lasso回归简介四、Lasso超参数调整与模型选择 一、什么是机器学习&#xff1f; 机器学习是一种人工智能技术&#xff0c;它使计算机系统能够从数据中学习并做出预测或决策&#xff0c;而无需明确编程。它涉及到使用算…

二叉树树的知识,选择➕编程

在一棵深度为7的完全二叉树中&#xff0c;可能有多少个结点&#xff1f;&#xff08;1层深度为1&#xff0c;节点个数为1&#xff09; 对于深度 d的完全二叉树&#xff1a; 完全二叉树中&#xff0c;前 d−1层是满的。 最后一层&#xff08;第 d 层&#xff09;可以不满&#x…

imazing电脑怎么下载 imazing怎么下载软件 使用iMazing下载和卸载Apple设备上的应用程序

iMazing官方版是一款管理苹果设备的软件&#xff0c;是一款帮助用户管理 iOS手机的PC端应用程序&#xff0c;能力远超 iTunes 提供的终极 iOS 设备管理器。在iMazing官方版上与苹果设备连接后&#xff0c;可以轻松传输文件&#xff0c;浏览保存信息等&#xff0c;功能比iTunes更…

【C++题解】1108 - 正整数N转换成一个二进制数

问题&#xff1a;1108 - 正整数N转换成一个二进制数 类型&#xff1a;进制转换 题目描述&#xff1a; 输入一个不大于 32767 的整数 n &#xff0c;将它转换成一个二进制数。 输入&#xff1a; 输入只有一行&#xff0c;包括一个整数 &#xff08;0 ≤ n ≤ 32767)。 输出…

Day1--每日一练

&#x1f341; 个人主页&#xff1a;爱编程的Tom&#x1f4ab; 本篇博文收录专栏&#xff1a;每日一练-算法篇&#x1f449; 目前其它专栏&#xff1a;c系列小游戏 c语言系列--万物的开始_ Java专栏等 &#x1f389; 欢迎 &#x1f44d;点赞✍评论⭐收藏&…

MacOS和Windows中怎么安装Redis

希望文章能给到你启发和灵感&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏 支持一下博主吧&#xff5e; 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、MacOS中Redis的安装2.1 HomeBrew 安装&#xff08;推荐&#xff09;2.2 通过官方…

终于找到了免费的C盘清理软件(极智C盘清理)

搜了很久&#xff0c;终于让我找到了一款 完全免费的C盘清理软件&#xff08;极智C盘清理&#xff09;。 点击前往官网免费使用极智C盘清理软件&#xff1a; C盘清理 用户好评 完全免费的极智C盘清理 用极智C盘清理清理了下系统的临时文件、缓存等无用数据文件&#xff0c;C盘终…