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

线段树-模板-区间查询-区间修改

【模板】线段树 2

传送门:https://www.luogu.com.cn/problem/P3373
题单:https://www.luogu.com.cn/training/16376#problems

题目描述

如题,已知一个数列,你需要进行下面三种操作:

  • 将某区间每一个数乘上 x x x
  • 将某区间每一个数加上 x x x
  • 求出某区间每一个数的和。

输入格式

第一行包含三个整数 n , q , m n,q,m n,q,m,分别表示该数列数字的个数、操作的总个数和模数。

第二行包含 n n n 个用空格分隔的整数,其中第 i i i 个数字表示数列第 i i i 项的初始值。

接下来 q q q 行每行包含若干个整数,表示一个操作,具体如下:

操作 1 1 1: 格式:1 x y k 含义:将区间 [ x , y ] [x,y] [x,y] 内每个数乘上 k k k

操作 2 2 2: 格式:2 x y k 含义:将区间 [ x , y ] [x,y] [x,y] 内每个数加上 k k k

操作 3 3 3: 格式:3 x y 含义:输出区间 [ x , y ] [x,y] [x,y] 内每个数的和对 m m m 取模所得的结果

输出格式

输出包含若干行整数,即为所有操作 3 3 3 的结果。

样例 #1

样例输入 #1

5 5 38
1 5 4 2 3
2 1 4 1
3 2 5
1 2 4 2
2 3 5 5
3 1 4

样例输出 #1

17
2

提示

【数据范围】

对于 30 % 30\% 30% 的数据: n ≤ 8 n \le 8 n8 q ≤ 10 q \le 10 q10
对于 70 % 70\% 70% 的数据:$n \le 10^3 , , q \le 10^4$。
对于 100 % 100\% 100% 的数据: 1 ≤ n ≤ 1 0 5 1 \le n \le 10^5 1n105 1 ≤ q ≤ 1 0 5 1 \le q \le 10^5 1q105

除样例外, m = 571373 m = 571373 m=571373

(数据已经过加强 _

样例说明:

故输出应为 17 17 17 2 2 2 40 m o d 38 = 2 40 \bmod 38 = 2 40mod38=2)。

代码

#include <bits/stdc++.h>#define MAXN 100010
#define ll long longusing namespace std;int n, m, mod;
int a[MAXN];struct Segment_Tree {ll sum, add, mul;int l, r;
}s[MAXN * 4];void update(int pos) {s[pos].sum = (s[pos << 1].sum + s[pos << 1 | 1].sum) % mod;return;
}void pushdown(int pos) { //pushdown的维护s[pos << 1].sum = (s[pos << 1].sum * s[pos].mul + s[pos].add * (s[pos << 1].r - s[pos << 1].l + 1)) % mod;s[pos << 1 | 1].sum = (s[pos << 1 | 1].sum * s[pos].mul + s[pos].add * (s[pos << 1 | 1].r - s[pos << 1 | 1].l + 1)) % mod;s[pos << 1].mul = (s[pos << 1].mul * s[pos].mul) % mod;s[pos << 1 | 1].mul = (s[pos << 1 | 1].mul * s[pos].mul) % mod;s[pos << 1].add = (s[pos << 1].add * s[pos].mul + s[pos].add) % mod;s[pos << 1 | 1].add = (s[pos << 1 | 1].add * s[pos].mul + s[pos].add) % mod;s[pos].add = 0;s[pos].mul = 1;return; 
}void build_tree(int pos, int l, int r) { //建树s[pos].l = l;s[pos].r = r;s[pos].mul = 1;if (l == r) {s[pos].sum = a[l] % mod;return;}int mid = (l + r) >> 1;build_tree(pos << 1, l, mid);build_tree(pos << 1 | 1, mid + 1, r);update(pos);return;
}void ChangeMul(int pos, int x, int y, int k) { //区间乘法if (x <= s[pos].l && s[pos].r <= y) {s[pos].add = (s[pos].add * k) % mod;s[pos].mul = (s[pos].mul * k) % mod;s[pos].sum = (s[pos].sum * k) % mod;return;}pushdown(pos);int mid = (s[pos].l + s[pos].r) >> 1;if (x <= mid) ChangeMul(pos << 1, x, y, k);if (y > mid) ChangeMul(pos << 1 | 1, x, y, k);update(pos);return;
}void ChangeAdd(int pos, int x, int y, int k) { //区间加法if (x <= s[pos].l && s[pos].r <= y) {s[pos].add = (s[pos].add + k) % mod;s[pos].sum = (s[pos].sum + k * (s[pos].r - s[pos].l + 1)) % mod;return;}pushdown(pos);int mid = (s[pos].l + s[pos].r) >> 1;if (x <= mid) ChangeAdd(pos << 1, x, y, k);if (y > mid) ChangeAdd(pos << 1 | 1, x, y, k);update(pos);return;
}ll AskRange(int pos, int x, int y) { //区间询问if (x <= s[pos].l && s[pos].r <= y) {return s[pos].sum;}pushdown(pos);ll val = 0;int mid = (s[pos].l + s[pos].r) >> 1;if (x <= mid) val = (val + AskRange(pos << 1, x, y)) % mod;if (y > mid) val = (val + AskRange(pos << 1 | 1, x, y)) % mod;return val;
}int main() {scanf("%d%d%d", &n, &m, &mod);for (int i = 1; i <= n; i++) {scanf("%d", &a[i]);}build_tree(1, 1, n);for (int i = 1; i <= m; i++) {int opt, x, y;scanf("%d%d%d", &opt, &x, &y);if (opt == 1) {int k;scanf("%d", &k);ChangeMul(1, x, y, k);}if (opt == 2) {int k;scanf("%d", &k);ChangeAdd(1, x, y, k);}if (opt == 3) {printf("%lld\n", AskRange(1, x, y));}}return 0;
}

相关文章:

线段树-模板-区间查询-区间修改

【模板】线段树 2 传送门&#xff1a;https://www.luogu.com.cn/problem/P3373 题单&#xff1a;https://www.luogu.com.cn/training/16376#problems 题目描述 如题&#xff0c;已知一个数列&#xff0c;你需要进行下面三种操作&#xff1a; 将某区间每一个数乘上 x x x&a…...

微服务架构和分布式架构的区别

微服务架构和分布式架构的区别 有&#xff1a;1、含义不同&#xff1b;2、概念层面不同&#xff1b;3、解决问题不同&#xff1b;4、部署方式不同&#xff1b;5、耦合度不同。其中&#xff0c;含义不同指微服务架构是一种将一个单一应用程序开发为一组小型服务的方法&#xff…...

Ajax-概念、Http协议、Ajax请求及其常见问题

Ajax Ajax概念Ajax优缺点HTTP协议请求报文响应报文 Ajax案例准备工作express基本使用创建一个服务器 发送AJAX请求GET请求POST请求JSON响应 Ajax请求出现的问题IE缓存问题Ajax请求超时与网络异常处理Ajax手动取消请求Ajax重复发送请求问题 Ajax概念 AJAX 全称为Asynchronous J…...

react 09之状态管理工具1 redux+ react-thunk的使用实现跨组件状态管理与异步操作

目录 react 09之状态管理工具1 redux react-thunk的使用实现跨组件状态管理与异步操作store / index.js store的入口文件index.js 在项目入口文件 引入store / actionType.js 定义action的唯一标识store / reducers / index.jsstore / actions / form.jsstore / reducers / for…...

opencv实战项目 手势识别-实现尺寸缩放效果

手势识别系列文章目录 手势识别是一种人机交互技术&#xff0c;通过识别人的手势动作&#xff0c;从而实现对计算机、智能手机、智能电视等设备的操作和控制。 1. opencv实现手部追踪&#xff08;定位手部关键点&#xff09; 2.opencv实战项目 实现手势跟踪并返回位置信息&…...

Netty对HPACK头部压缩的支持

前言 HTTP2终于支持对头部进行压缩传输了&#xff0c;Netty很早就支持HTTP2了&#xff0c;看下Netty对HPACK的实现源码&#xff0c;可以对HPACK理解的更深一下。 HpackDecoder Netty内置的编解码器Http2FrameCodec专门用来对HTTP2的各种Frame进行编解码&#xff0c;其中就包…...

C++:替换string中的字符

1.按照位置进行替换 string的成员函数replace可以满足这种需求,其变体有很多种,请参考官方文档,以下列举常用的两种: #include <iostream> #include <string> using namespace std;int main() {string s = "hello world";s.replace(s.begin(), s.b…...

【ChatGPT】自我救赎

ChatGPT辅助学习C之【在C中如果大数据类型转小数据类型会发生什么呢?】&#xff0c;今天问ChatGPT一个问题&#xff0c;让它解析下面这个C程序&#xff1a; #include <iostream> #include <cstdio> using namespace std; int main() {int a;long long b532165478…...

微信小程序(由浅到深)

文章目录 一. 项目基本配置1. 项目组成2. 常见的配置文件解析3. app.json全局的五大配置4.单个页面中的page配置5. App函数6.tabBar配置 二. 基本语法&#xff0c;事件&#xff0c;单位1. 语法2. 事件3. 单位 三. 数据响应式修改四 . 内置组件1. button2. image3. input4. 组件…...

冒泡排序 简单选择排序 插入排序 快速排序

bubblesort 两个for循环&#xff0c;从最右端开始一个一个逐渐有序 #include <stdio.h> #include <string.h> #include <stdlib.h>void bubble(int *arr, int len); int main(int argc, char *argv[]) {int arr[] {1, 2, 3, 4, 5, 6, 7};int len sizeof(…...

linux文件I/O之 open() 函数用法

#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> typedef unsigned int mode_t ; int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); 函数功能 打开或创建一个文件 返回值 成功…...

用Java操作MySQL数据库

新建Maven项目 创建Maven项目 添加依赖 在pom.xml的标签里加上下面的内容 如果是MySQL 5.8那么的版本号是5.x.x, 例如5.1.49 如果是MySQL 8.0那么的版本号是8.x.x, 例如 8.0.28 <dependencies><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java …...

SpringBoot启动报错:java: 无法访问org.springframework.boot.SpringApplication

报错原因&#xff1a;jdk 1.8版本与SpringBoot 3.1.2版本不匹配 解决方案&#xff1a;将SpringBoot版本降到2系列版本(例如2.5.4)。如下图&#xff1a; 修改版本后切记刷新Meavn依赖 然后重新启动即可成功。如下图&#xff1a;...

Vue3 setup语法糖 解决富文本编辑器上传图片64位码过长问题 quill-image-extend-module

引言&#xff1a; 富文本编辑器传图片会解码成64位&#xff0c;非常长导致数据库会报错第一种方法&#xff1a;将数据库类型改成 mediumtext第二种办法&#xff1a;本文中的方法 说明&#xff0c;本周文所用语法糖为Vue3 setup语法&#xff0c;即<script setup> 思路 拦…...

百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换

<!DOCTYPE html> <html><head><meta charset="UTF-8"><title></title></head><body><script>/*** * 百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换*///定义一些常量var x_PI = …...

论文浅尝 | CI4MRC:基于因果推断去除机器阅读理解中的名字偏差

笔记整理&#xff1a;朱珈徵&#xff0c;天津大学硕士&#xff0c;研究方向&#xff1a;问答 链接&#xff1a;https://aclanthology.org/2023.findings-acl.812/ 动机 机器阅读理解&#xff08;Machine Reading Comprehension&#xff0c;MRC&#xff09;是根据给定的文章回答…...

【校招VIP】测试计划之黑盒测试白盒测试

考点介绍&#xff1a; 黑盒测试&白盒测试是大厂和三四线公司校招的必考点。黑盒是以结果说话&#xff0c;白盒往往需要理解实现逻辑。现在商业项目的接口测试往往以白盒为主&#xff0c;也就是需要测试同学自己观察和修改数据库的值进行用例的测试。 但是无论采用哪种测试方…...

学习笔记整理-JS-01-语法与变量

文章目录 一、语法与变量1. 初识JavaScript2. JavaScript的历史3. JavaScript与ECMAScript的关系4. JavaScript的体系5. JavaScript的语言风格和特性 二、语法1. JavaScript的书写位置2. 认识输出语句3. REPL环境&#xff0c;交互式解析器4. 变量是什么5. 重点内容 一、语法与变…...

PHP之PHPExcel

include PHPExcel.php; include PHPExcel/Writer/Excel2007.php; //或者include PHPExcel/Writer/Excel5.php; 用于输出.xls的 //创建一个excel $objPHPExcel new PHPExcel(); // 输出Excel表格到浏览器下载 header(Content-Type: application/vnd.ms-excel); header(Content-…...

Redis系列(一):深入了解Redis数据类型和底层数据结构

Redis有以下几种常用的数据类型&#xff1a; redis数据是如何组织的 为了实现从键到值的快速访问&#xff0c;Redis 使用了一个哈希表来保存所有键值对。 Redis全局哈希表&#xff08;Global Hash Table&#xff09;是指在Redis数据库内部用于存储所有键值对的主要数据结构。…...

浅聊26上半年软考架构师

2026年上半年架构师考试已然落幕&#xff0c;大家都考的如何&#xff1f;架构师共有三门考试&#xff0c;上午综合知识&#xff08;75道选择题&#xff09;案例分析&#xff0c;时间为8.30-12.30&#xff1b;下午论文&#xff0c;时间为14.30-16.30。下面说说我整体的备考过程。…...

BLE蓝牙扫描深度剖析:扫描原理、核心参数、前后台差异

一、前言BLE设备交互分为两大角色&#xff1a;广播端&#xff08;外设Peripheral&#xff09;与扫描端&#xff08;中心Central&#xff09;。上一篇博客详解了四大广播模式&#xff0c;本文聚焦配套核心能力——BLE扫描机制。绝大多数蓝牙开发疑难问题&#xff1a;前台能扫后台…...

第3篇:系统透视——信息部门如何构建“税务友好型”IT架构

本篇导读&#xff1a;如果你是信息总监或IT负责人&#xff0c;请通读全文&#xff0c;尤其是“系统合规设计的三必须”和“现场检查SOP”&#xff1b;如果你是财税人员&#xff0c;请重点阅读“研产供销全链条的系统对接要求”和“与IT部门的协作要点”&#xff1b;如果你是老板…...

《我看见的世界:李飞飞自传》第1-6章阅读笔记:从移民少女到AI教母的“看见“之旅

前言 当我们谈论人工智能时&#xff0c;我们谈论的是算法、数据、算力&#xff0c;是那些冰冷的代码和复杂的模型。但在《我看见的世界&#xff1a;李飞飞自传》中&#xff0c;李飞飞用她独特的视角告诉我们&#xff1a;AI的本质&#xff0c;是人类对"看见"世界的渴望…...

风控系统如何全维度识别爬虫:IP、账号与行为的协同决策机制

1. 这不是“反爬失败”&#xff0c;而是风控系统在对你做全维度画像你写完一段 requests BeautifulSoup 的代码&#xff0c;本地跑通了&#xff0c;开开心心部署到服务器&#xff0c;结果第二天早上发现&#xff1a;所有请求返回 403&#xff0c;日志里全是空响应&#xff1b;…...

正视孩童情绪波动,耐心陪伴平稳疏导

孩子的情绪就像夏天的天气&#xff0c;前一秒还晴空万里&#xff0c;后一秒可能就乌云密布。面对突如其来的哭闹、发脾气或者闷闷不乐&#xff0c;很多家长会急着“灭火”——要么讲道理&#xff0c;要么直接制止。但其实&#xff0c;情绪波动本身不是问题&#xff0c;它是孩子…...

Jetson Orin上TVA模型DLA精准卸载配置

重磅预告&#xff1a;本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容&#xff0c;该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著&#xff0c;特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...

手机也能玩转无人机仿真:用安卓QGC App连接同一WiFi下的PX4 JMAVSim模拟器

手机也能玩转无人机仿真&#xff1a;用安卓QGC App连接同一WiFi下的PX4 JMAVSim模拟器 无人机开发者和爱好者们&#xff0c;是否曾想过用手机就能完成整个无人机仿真测试流程&#xff1f;告别笨重的电脑束缚&#xff0c;只需一部安卓设备&#xff0c;就能在沙发上调试飞控算法。…...

3大技术突破:重新定义Switch游戏安装性能极限

3大技术突破&#xff1a;重新定义Switch游戏安装性能极限 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer Awoo Installer是一款专为破解版Nintendo…...

Linux 负载均衡的 cache_nice_tries:缓存友好的迁移尝试

简介现如今服务器、嵌入式设备、工控主板普遍采用多核、NUMA 架构 CPU&#xff0c;多进程多线程并发运行模式成为常态。Linux 内核依靠调度域分层负载均衡机制&#xff0c;分散 CPU 运行压力&#xff0c;避免单核心负载过高、其余核心空闲浪费硬件算力。但任务跨核心迁移是一把…...