【模板】线段树 2(区间乘,区间加,区间和)

C++ 类模板实现2个数的最大值、最小值、加、减、乘、除等算术运算 要求定义类模板实现2个数的最大值、最小值、加、减、乘、除等算术运算,在main ()函数中使用该类模板分别实例化为int型和double型的类,定义相关的对象,读入2个整数和2个浮点数,然后分别输出它们的最大值、最小值、加、减、乘、除的结果。分2行分别输出整数和浮点数的运算结果,每行依次输出2个数的最大值、最小值、加、减、乘、除等算术运算。分别输入2组数字,第一行为2个整数,以空格分隔;第二行为2个浮点数,以空格分隔。 阅读详情
题目链接https://www.luogu.com.cn/problem/P3373
代码
#include<iostream>
#include<cstdio>
#include<vector>
#define int long long 
using namespace std;
const int maxn=1e5+10;
int n,m,mod,a[maxn]; 
struct node
{
	int l;
	int r;
	int data;
	int lazy;
	int mul;
}t[maxn<<2];
void pushup(int p)
{
	t[p].data=t[p<<1].data+t[p<<1|1].data;
}
void pushdown(int p)
{
	t[p<<1].data=(t[p<<1].data*t[p].mul+t[p].lazy*(t[p<<1].r-t[p<<1].l+1))%mod;
	t[p<<1|1].data=(t[p<<1|1].data*t[p].mul+t[p].lazy*(t[p<<1|1].r-t[p<<1|1].l+1))%mod;
	t[p<<1].mul=(t[p<<1].mul*t[p].mul)%mod;
	t[p<<1].lazy=(t[p<<1].lazy*t[p].mul+t[p].lazy)%mod;
	t[p<<1|1].mul=(t[p<<1|1].mul*t[p].mul)%mod;
	t[p<<1|1].lazy=(t[p<<1|1].lazy*t[p].mul+t[p].lazy)%mod;
	t[p].mul=1;
	t[p].lazy=0;
}
void build(int p,int l,int r)
{
	t[p].l=l,t[p].r=r,t[p].lazy=0,t[p].mul=1;
	if(l==r)
	{
		t[p].data=a[l];
		return ;
    }
    int mid=(l+r)>>1;
    build(p<<1,l,mid);
    build(p<<1|1,mid+1,r);
    pushup(p);
}
void change1(int p,int l,int r,int k)
{
	if(l<=t[p].l&&t[p].r<=r)
	{
		t[p].data=(t[p].data*k)%mod;
		t[p].mul=(t[p].mul*k)%mod;
		t[p].lazy=(t[p].lazy*k)%mod;
		return ;
	}
	pushdown(p);
	int mid=(t[p].l+t[p].r)>>1;
	if(l<=mid) change1(p<<1,l,r,k);
	if(r>mid) change1(p<<1|1,l,r,k);
	pushup(p);
} 
void change2(int p,int l,int r,int d)
{
	if(l<=t[p].l&&t[p].r<=r)
	{
		t[p].data=(t[p].data+d*(t[p].r-t[p].l+1))%mod;
		t[p].lazy=(t[p].lazy+d)%mod;
		return ;
	}
	pushdown(p);
	int mid=(t[p].l+t[p].r)>>1;
	if(l<=mid) change2(p<<1,l,r,d);
	if(r>mid) change2(p<<1|1,l,r,d);
	pushup(p);
} 
int ask(int p,int l,int r)
{
    if(l<=t[p].l&&t[p].r<=r)
        return t[p].data;
    pushdown(p);
    int mid=(t[p].l+t[p].r)>>1,ans=0;
    if(l<=mid) ans=(ans+ask(p<<1,l,r))%mod;
	if(r>mid) ans=(ans+ask(p<<1|1,l,r))%mod;
	return ans%mod;
}
signed main()
{
	cin>>n>>m>>mod;
	for(int i=1;i<=n;i++) cin>>a[i];
	build(1,1,n);
	while(m--)
	{
		int op,x,y,k;
		cin>>op>>x>>y;
		if(op==1)
		{
			cin>>k;
			change1(1,x,y,k);
		}
		else if(op==2)
		{
			cin>>k;
			change2(1,x,y,k);
		}
		else 
			cout<<ask(1,x,y)<<endl;
	}
	return 0;
} 
定义类模板实现2个数的算术运算 本题目要求定义类模板实现2个数的最大值、最小值、加、减、乘、除等算术运算,在main()函数中使用该类模板分别实例化为int型和double型的类,定义相关的对象,读入2个整数和2个浮点数,然后分别输出它们的最大值、最小值、加、减、乘、除的结果。 立即下载

相关推荐

线段树模板

手打了一份线段树代码,用于c++编程, 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。 使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而未优化的空间复杂度为2N,实际应用时一般还要开4N的数组以免越界,因此有时需要离散化让空间压缩。

c++练习题-----定义类模板实现2个数的算术运算

7-1 定义类模板实现2个数的算术运算 (12分) 本题目要求定义类模板实现2个数的最大值、最小值、加、减、乘、除等算术运算,在main()函数中使用该类模板分别实例化为int型和double型的类,定义相关的对象,读入2个整数和2个浮点数,然后分别输出它们的最大值、最小值、加、减、乘、除的结果。 输入格式: 分别输入2组数字,第一行为2个整数,以空格分隔;第二行为2个浮点数,以空格分隔。 输出格式: 分2行分别输出整数和浮点数的运算结果,每行依次输出2个数的最大值、最小值、加、减、乘、除等算术运

bless_my_head的博客 7974

麒麟OS恢复出厂设置原理与实操:非重装的系统状态回滚

Linux操作系统中的‘恢复出厂设置’并非简单重装或镜像还原,而是一种基于状态快照、包管理与配置模板的可控回滚机制。其核心原理依赖LVM快照技术、RPM包签名验证和预置配置模板,兼顾系统稳定性与用户数据安全。该方案在政务、教育等国产化场景中具有显著技术价值——不格式化硬盘、不丢失/home文档、不重配驱动与授权,大幅降低运维复杂度。典型应用场景包括系统卡顿修复、软件冲突清理、桌面环境异常恢复等。本文深入解析银河麒麟V10的kylin-restore-cli工具链与麒麟管家集成逻辑,聚焦‘恢复出厂设置’这一高

weixin_30879169的博客 772

1058: C++:类模板1(2个数的大数)

题目描述 定义类模板,类中包含两个数据成员,定义成员函数max()求这两个数中的大数。在main()中调用max()求两个整数和两个实数中的大数。 将下面的程序填写完整。 #include using namespace std; …………………………………… …………………………………… …………………………………… int main() { int a,b; double c,d; cin>>a>>b>>c>>d; Test t1(a,b); Test

m0_51374762的博客 1309

【大模型】大模型知识蒸馏 综述解读(Knowledge Distillation of Large Language Models)

知识蒸馏的(论文)方法总结。归纳了通过数据(如指令、对话、多模态)和训练方法(SFT、RL、数据增强),将复杂技能(如对齐、工具使用、多模态)蒸馏到开源模型的核心框架,附典型模型示例(如Alpaca、LLaVA)。

songxia928_928的博客 4335

GXHT40温湿度传感器:I2C通信与CRC校验实战解析

本文详细解析GXHT40温湿度传感器的I2C通信协议与CRC校验机制,涵盖硬件连接、时序控制、数据读取及加热功能应用。通过实战案例分享优化技巧与异常处理,帮助开发者提升嵌入式系统中传感器数据的准确性与可靠性。

rgv234567的博客 241

声明一个类模板,利用它分别实现两个整数、浮点数和字符的比较,求出大数和小数。(在类模板外定义各成员函数)

声明一个类模板,利用它分别实现两个整数、浮点数和字符的比较,求出大数和小数。(在类模板外定义各成员函数) #include<iostream> using namespace std; template <class numtype>//声明类模板,虚拟类型名为numtype class Compare//定义构造函数 { public: Compare(numtype a,numtype b) { x=a; y=b; } numtype m

AKK188888881的博客 2376

envi反演水质参数_遥感水质反演之反演模型

水质反演的框架图此为反演模型的章节第一部分,统计学基础:概率论、矩阵和数理统计的知识统计学知识框架# 1 基本统计概念知识在于应用,而非记忆!我们都是在样本的层面去操作数据的,以达到对总体性质的估计和推断,拿到一组数据首先进行基本的统计描述,常用的有:样本均值: 样本方差(调整方差)不是除以n,而是n-1, 标准差为样本方差开方即可皮尔逊积矩相关系数(简称相关系数): 相关系数范围在[-1,...

weixin_35275922的博客 3228

[模板]线段树2 (区间乘 + 区间加 + 区间求和)

时间限制: 1.00s 内存限制: 125.00MB。

蒟蒻 362

【技术纵览】行为识别前沿模型演进:从CNN到多模态大模型

本文全面解析了行为识别技术从CNN到多模态大模型的演进历程,重点介绍了SlowFast、TimeSformer、VideoMAE和InternVideo等SOTA模型的核心创新与应用实践。通过对比分析各代模型在Kinetics-400等数据集上的表现,揭示了自监督学习和多模态融合如何推动行为识别准确率突破85%,并探讨了工业部署中的技术选型策略与优化方向。

weixin_29169505的博客 153

DisplayPort 1.4数据扰码实战:16bit LFSR并行优化技巧(附Verilog代码)

本文深入探讨了DisplayPort 1.4协议中16bit数据扰码的并行化实现。针对高带宽视频传输需求,文章详细推导了16位LFSR(线性反馈移位寄存器)的单周期16步并行计算公式,并提供了可直接使用的Verilog代码,解决了传统8bit串行处理吞吐量不足的瓶颈,为高速接口设计提供了关键优化技巧。

y4z5a6b7的博客 259

【线段树 区间加 区间乘】 洛谷 P3373 【模板】线段树 2

P3373 【模板】线段树 2 https://www.luogu.org/problem/P3373 题目描述 如题,已知一个数列,你需要进行下面三种操作: 1.将某区间每一个数乘上x 2.将某区间每一个数加上x 3.求出某区间每一个数的和 输入格式 第一行包含三个整数N、M、P,分别表示该数列数字的个数、操作的总个数和模数。 第二行包含N个用空格分隔的整数,其中第i个数字表...

qq_41037114的博客 313

SpringBoot文件上传实战:MultipartFile重复读取的3种方法(附避坑指南)

本文详细介绍了SpringBoot中处理MultipartFile重复读取的3种实用方法,包括字节数组缓存法、临时文件法和流重置法,并提供了避坑指南和性能优化技巧。特别适合需要多次读取上传文件内容的开发者,帮助解决InputStream流只能读取一次的问题。

weixin_28710999的博客 398

P3373 【模板】线段树 2(区间乘+区间加)

P3373 【模板】线段树 2 题目链接 既有区间乘又有区间加,那么乘和加的顺序很关键 先乘后加:a∗b+ca*b+ca∗b+c ,自然没什么影响 先加后乘:(a+b)∗c=a∗c+b∗c(a+b)*c=a*c+b*c(a+b)∗c=a∗c+b∗c ,如果我们不进行处理,仅仅单独做乘和加的标记,就会变得混乱 我们只需要对加法标记乘上 ccc 就行,也就是把这个式子的括号展开都变成加。 code #include <iostream> #include <algorithm> #i

NaNa 200

【Bug已解决】Codex capacity errors 自动重试与意图保留 解决方案

原始报错:Codex Desktop: capacity errors should preserve intent and auto-retry instead of handing model routing back to the user场景:向模型服务发请求时遇到容量错误(服务端繁忙 / 限流 / 容量不足),客户端不做任何重试,直接把"请求失败,请选择另一个模型或重试"的锅甩给用户,让用户手动去点。用户本来只是想完成一次任务,却被中途打断去当"调度员"。

博客 279

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

洛谷 P3373 【模板】线段树 2(线段树区间乘、加 区间查找)

题目描述 如题,已知一个数列,你需要进行下面三种操作: 1.将某区间每一个数乘上x 2.将某区间每一个数加上x 3.求出某区间每一个数的和 输入格式 第一行包含三个整数N、M、P,分别表示该数列数字的个数、操作的总个数和模数。 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。 接下来M行每行包含3或4个整数,表示一个操作,具体如下: 操...

weixin_30780221的博客 97

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

算法模板——线段树2(区间加+区间乘+区间求和)

该模板实现的功能——进行区间的乘法和加法,以及区间的求和(1:乘法 2:加法 3:求和)详见BZOJ1798 1 type 2 vet=record 3 a0,a1:int64; 4 end; 5 var 6 i,j,k,l,m,n,a2,a3,a4:longint; 7 p:int64...

187

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

P3373 【模板】线段树 2【区间乘/加 区间查询】

https://www.luogu.com.cn/problem/P3373 #include<bits/stdc++.h> using namespace std; typedef long long int LL; const int N=1e5+10; int n,m,p; int w[N]; struct node { int l,r; int sum,add,mul; }tr[N*4]; void pushup(int u) { tr[u].sum=(tr[u<<.

辉小歌的博客 362

P3373 【模板】线段树 2 区间求和 区间乘 区间加

题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含三个整数N、M、P,分别表示该数列数字的个数、操作的总个数和模数。 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。 接下来M行每行包含3或4个整数,表示一个操作,具体如下...

weixin_34064653的博客 143

【数据结构模板】线段树2(加乘 区间修改 区间查询)

#include<cstdio> #include<iostream> #include<algorithm> using namespace std; typedef unsigned long long ll; #define maxn 100001 int n,m; ll mod; ll a[maxn],tree[maxn<<2],add[maxn<<2],mul[maxn<<2]; ll ls(ll p){ return p.

melon_sama的博客 101

线段树多种修改操作总结

洛谷 P3373 【模板】线段树 2 修改:区间加、乘 查询:区间和 关键:先乘后加,更新mul tag时,add tag也要乘一下。

skyline的分享专栏 357

线段树 2

线段树模板题

欢迎您的光顾awa 312

线段树区间乘和区间加

【代码】线段树区间乘和区间加。

2302_79372568的博客 487
上一篇: 【模板】线段树 1(区间加,区间和)
下一篇: 【模板】三分法(板子)
Cosmic_Tree
博客等级 码龄7年 134粉丝 337原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值