【代码超详解】洛谷 P3372 【模板】线段树 1

【代码超详解】洛谷 P3372 【模板】线段树 1一 题目描述 如题 已知一个数列 你需要进行下面两种操作 1 将某区间每一个数加上 x 2 求出某区间每一个数的和 输入格式 第一行包含两个整数 N M 分别表示该数列数字的个数和操作的总个数 第二行包含 N 个用空格分隔的整数 其中第 i 个数字表示数列第 i 项的初始值 接下来 M 行每行包含 3 或 4 个整数 表示一个操作 具体如下 操作 1 格式 1 x y k 含义 将区间 x

大家好,我是讯享网,很高兴认识大家。

一、题目描述

如题,已知一个数列,你需要进行下面两种操作:
1.将某区间每一个数加上x
2.求出某区间每一个数的和

输入格式
第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。
第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。
接下来M行每行包含3或4个整数,表示一个操作,具体如下:
操作1: 格式:1 x y k 含义:将区间[x,y]内每个数加上k
操作2: 格式:2 x y 含义:输出区间[x,y]内每个数的和

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

讯享网

输出 #1

讯享网11 8 20 

说明/提示

时空限制:1000ms,128M

数据规模:


讯享网

对于30%的数据:N<=8,M<=10

对于70%的数据:N<=1000,M<=10000

对于100%的数据:N<=,M<=

(数据已经过加强,保证在int64/long long数据范围内)

样例说明:

在这里插入图片描述

二、算法分析说明与代码编写指导

在这里插入图片描述在这里插入图片描述在这里插入图片描述

三、AC 代码

#include<cstdio> #pragma warning(disable:4996) template<class _Ty> class segment_tree { 
    private: _Ty* a, * b, * lazy, v; size_t n, Size, L, R; _Ty get_sum(const size_t& s, const size_t& t, const size_t& r) const { 
    if (s >= L && t <= R)return b[r]; _Ty m = (s + t) / 2, sum = 0, r0 = 2 * r, r1 = r0 + 1; if (lazy[r]) { 
    b[r0] += lazy[r] * (m - s + 1), b[r1] += lazy[r] * (t - m), lazy[r0] +
小讯
上一篇 2025-01-09 10:58
下一篇 2025-01-19 09:03

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/27963.html