洛谷 P1438 无聊的数列

题意

给定一个序列 A = ( A 1 , A 2 , ⋯ , A n ) A=(A_1,A_2,\cdots,A_n) A=(A1,A2,,An)
现在进行 m m m次操作,分为以下两种:

  • 1 l r k d:给定一个长度为 r − l + 1 r-l+1 rl+1的等差序列,首项为 k k k,公差为 d d d,并将它对应加到 [ l , r ] [l,r] [l,r]范围中的每一个数上。
  • 2 x:查询 A x A_x Ax的值。

思路

将序列 A A A进行差分,记差分数组为 B B B
接下来,如果要加上一个等差序列,则要进行以下操作:

  • B l = B l + k B_l=B_l+k Bl=Bl+k
  • B i = B i + d ( i ∈ [ l , r ] ) B_i=B_i+d \quad (i \in [l, r]) Bi=Bi+d(i[l,r])
  • B r + 1 = B r + 1 − ( k + d × ( r − l ) ) B_{r+1}=B_{r+1}-(k + d \times (r - l)) Br+1=Br+1(k+d×(rl))

如果不懂,看看下面的例子:
原序列:  A = ( 0 , 0 , 0 , 0 , 0 , 0 ) A=(0,0,0,0,0,0) A=(0,0,0,0,0,0)
差分序列: B = ( 0 , 0 , 0 , 0 , 0 , 0 ) B=(0,0,0,0,0,0) B=(0,0,0,0,0,0)
等差序列: C = ( 1 , 3 , 5 , 7 , 9 ) C=(1,3,5,7,9) C=(1,3,5,7,9)
现序列:  A = ( 1 , 3 , 5 , 7 , 9 , 0 ) A=(1,3,5,7,9,0) A=(1,3,5,7,9,0)
差分序列: B = ( 1 , 2 , 2 , 2 , 2 , − 9 ) B=(1,2,2,2,2,-9) B=(1,2,2,2,2,9)

如果要查询 A p A_p Ap,就输出 ∑ i = 1 p B i \sum_{i=1}^{p} B_i i=1pBi
执行以上操作,只需要一个支持单点修改、区间修改。区间查询的线段树即可。

代码

#include <iostream>
#include <vector>
using namespace std;#define int long longstruct segment{#define ls (u << 1)#define rs (u << 1 | 1)struct Node{int l, r, sum = 0, add = 0;};vector<Node> tr;segment(vector<int> &a){int n = a.size();tr.resize(n << 2);build(1, 1, n, a);}void pushup(int u){tr[u].sum = tr[ls].sum + tr[rs].sum;;}void build(int u, int l, int r, vector<int> &a){tr[u].l = l; tr[u].r = r;if(l == r){tr[u].sum = a[l - 1];return;}int mid = l + r >> 1;build(ls, l, mid, a);build(rs, mid + 1, r, a);pushup(u);} void pushdown(int u){if(tr[u].add){tr[ls].sum += tr[u].add * (tr[ls].r - tr[ls].l + 1);tr[rs].sum += tr[u].add * (tr[rs].r - tr[rs].l + 1);tr[ls].add += tr[u].add;tr[rs].add += tr[u].add;tr[u].add = 0;}}void modify(int u, int l, int r, int v){if(l <= tr[u].l && tr[u].r <= r){tr[u].sum += v * (tr[u].r - tr[u].l + 1);tr[u].add += v;return;}pushdown(u);int mid = tr[u].l + tr[u].r >> 1;if(l <= mid) modify(ls, l, r, v);if(r > mid) modify(rs, l, r, v);pushup(u);}int query(int u, int l, int r){if(l <= tr[u].l && tr[u].r <= r) return tr[u].sum;pushdown(u);int mid = tr[u].l + tr[u].r >> 1;int ans = 0;if(l <= mid) ans += query(ls, l, r);if(r > mid) ans += query(rs, l, r);return ans;}#undef ls#undef rs
};signed main(){ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);int n, m;cin >> n >> m;vector<int> a(n);for(auto &i: a) cin >> i;vector<int> diff(n);diff[0] = a[0];for(int i = 1; i < n; i++) diff[i] = a[i] - a[i - 1]; segment seg(diff);for(int i = 0; i < m; i++){int op;cin >> op;if(op == 1){int l, r, k, d;cin >> l >> r >> k >> d;seg.modify(1, l, l, k);if(l + 1 <= r) seg.modify(1, l + 1, r, d);if(r < n) seg.modify(1, r + 1, r + 1, -(k + d * (r - l)));}else{int p;cin >> p;cout << seg.query(1, 1, p) << endl;}}return 0;
}

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

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

相关文章

【小白向】微信小程序解密反编译教程

# 前言 最近笔者有做到微信小程序的渗透测试&#xff0c;其中有一个环节就是对微信小程序的反编译进行源码分析&#xff0c;所谓微信小程序反编译&#xff0c;就是将访问的小程序进行反向编译拿到部分源码&#xff0c;然后对源码进行安全审计&#xff0c;分析出其中可能存在的…

图形学初识--颜色混合

文章目录 前言正文为什么要有颜色混合&#xff1f;颜色混合常见实现方式&#xff1f;上述颜色混合注意点 结尾&#xff1a;喜欢的小伙伴点点关注赞哦! 前言 本章节补充一下颜色混合的内容&#xff0c;主要包含&#xff1a;为什么要有颜色混合&#xff1f;颜色混合常实现方式&a…

BGP——边界网关路由协议

BGP -边界网关路由协议 OSPF RIP EIGRP AS——自治系统 标准编号16位二进制 0-65535 1-64511公有 64512 -私有 扩展编号 32位二进制 动态路由协议: GP ——内部网关路由协议 —— AS之内 或企业网、局域网 RIP OSPF EIGRP EGP-外部网关路由协议 - …

Centos 7 安装刻录至硬件服务器

前言 在日常测试中&#xff0c;会遇到很多安装的场景&#xff0c;今天给大家讲一下centos 7 的安装&#xff0c;希望对大家有所帮助。 一.下载镜像 地址如下&#xff1a; centos官方镜像下载地址https://www.centos.org/download/ 按照需求依次点击下载 二.镜像刻录 镜像刻…

idea springboot woff/woff2/eot/ttf/svg等小图标不显示的问题 - 第515篇

历史文章&#xff08;文章累计500&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《…

Shopify 独立站监控观测最佳实践

Shopify 简介 Shopify 是一个全球领先的电子商务平台&#xff0c;它为商家提供了一整套在线商店解决方案。自 2006 年成立以来&#xff0c;Shopify 已经帮助数百万商家在全球范围内建立和发展他们的在线业务。 监控观测 Shopify 站点对于确保业务连续性、优化用户体验和提高运…

python虚拟环境venv的安装--ubuntu

venv是Python内置的虚拟环境管理工具 1.安装python3-venv包&#xff1a; sudo apt install python3.12-venv2.创建虚拟环境&#xff08;在项目目录下&#xff09; python3 -m venv venv3. 激活虚拟环境&#xff1a; source venv/bin/activate4.在虚拟环境中安装所需的库&am…

Linux shell编程学习笔记56:date命令——显示或设置系统时间与日期

0 前言 2024年的网络安全检查又开始了&#xff0c;对于使用基于Linux的国产电脑&#xff0c;我们可以编写一个脚本来收集系统的有关信息。在收集的信息中&#xff0c;应该有一条是搜索信息的时间。 1. date命令 的功能、格式和选项说明 我们可以使用命令 date --help 来查看 d…

python 虚拟环境安装及python包库安装

python 虚拟环境安装及python包库安装 安装虚拟环境的方式注意事项 安装虚拟环境的方式 切记尽量不要混用 pip 安装 对于pip安装&#xff0c;使用命令如下 下载virtualenv 工具 pip install virtualenv 创建虚拟环境并激活环境virtualenv venv source ./venv/bin/activate co…

Kafka之Broker原理

1. 日志数据的存储 1.1 Partition 1. 为了实现横向扩展&#xff0c;把不同的数据存放在不同的 Broker 上&#xff0c;同时降低单台服务器的访问压力&#xff0c;我们把一个Topic 中的数据分隔成多个 Partition 2. 每个 Partition 中的消息是有序的&#xff0c;顺序写入&#x…

LeetCode刷题:反转链表

leetCode真题 206. 反转链表 属于基础简单题目 常见的做法有递归和while循环 递归 // 1. 递归参数和返回值public static ListNode reverseList(ListNode head) {// 1. 递归终止条件if (head null || head.next null) {return head;}// 递归逻辑ListNode last reverseL…

达梦数据库相关SQL及适配Mysql配置总结

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

解决Python导入第三方模块报错“TypeError: the first argument must be callable”

注意以下内容只对导包时遇到同样的报错会有参考价值。 问题描述 当你尝试导入第三方模块时&#xff0c;可能会遇到如下报错信息&#xff1a; TypeError: the first argument must be callable 猜测原因 经过仔细检查代码&#xff0c;我猜测这个错误的原因是由于变量名冲突所…

Windows 系统安装 VisualSVN Server

一.下载 VisualSVN Server VisualSVN-Server 是 SVN 版本控制中服务器端要使用的软件,就是我们提交代码存在安装这个软件的电脑上,它将很多配置和服务直接帮你完成,简单好用容易上手。VisualSVN Server有三个版本,社区版免费但限15个用户,另有一般和‘企业’两个收费版本…

如何卸载ollama

文章目录 一 概述二 卸载2.1 Windows平台卸载 ollama2.2 Linux 平台卸载 ollama2.3 Docker 平台卸载 ollama 参考链接 一 概述 本文档主要讲述 ollama 如何卸载&#xff0c;适用范围包括 Windows Linux 以及 Docker 等平台的安装方式。 二 卸载 2.1 Windows平台卸载 ollama …

学习C++应该做点什么项目

C作为一门底层可操作性很强的语言&#xff0c;广泛应用于游戏开发、工业和追求性能、速度的应用。 比如腾讯&#xff0c;无论游戏&#xff0c;还是微信&#xff0c;整个鹅厂后台几乎都是 C 开发&#xff0c;对 C 开发者的需求非常大。 但问题是C入门和精通都比较困难&#xf…

有哪些挣钱软件一天能赚几十元?盘点十个能长期做下去的挣钱软件

在这个信息爆炸的时代&#xff0c;每个人都在寻找快速赚钱的秘诀。很多人做兼职副业的目标并不是获得很大的成功&#xff0c;大部分人一天能赚几十就心满意足了。 今天&#xff0c;我要带你一探究竟&#xff0c;揭秘那些能让你日赚几十元的挣钱软件。准备好了吗&#xff1f;让我…

单枪匹马月入17万美元:数字游民Pieter Levels如何成就商业传奇

了解数字游民的应该都听说过 Pieter Levels&#xff0c;可以说他是数字游民的先驱人物。 他在推特上拥有超过43万的粉丝&#xff0c;仅凭一台笔记本电脑就连续建立了多个高盈利网站&#xff0c;光是推特主页上展示的比较新的几个网站&#xff0c;每月收入加起来就高达 17.6 万…

第九周:员工激励理论

1. 关注自己到关注他人 你是激励者&#xff0c;也会是被激励者。 虽然每个人的价值观不一样&#xff0c;但要做好激励员工这件事情&#xff0c;我觉得可以从自身角度出发&#xff0c;可以问问自己&#xff0c;你是如何被激励的&#xff1f; 如果是我&#xff0c;就只想要钱&…

如何实现区域公司和专业公司合理有效的衔接?

对于集团公司来说&#xff0c;各区域公司、专业公司的管理问题成为困扰管理者的难题。特别是在信息壁垒比较严重的情况下&#xff0c;各个单位往往各自为政、自行其是&#xff0c;缺乏有效的沟通和协作&#xff0c;导致整体管理效率低下。那么应该如何实现区域公司和专业公司合…