洛谷 P1438 无聊的数列 题解 线段树

洛谷 P1438 无聊的数列(线段树,差分) 线段树,差分 阅读详情

无聊的数列

题目背景

无聊的 YYB 总喜欢搞出一些正常人无法搞出的东西。有一天,无聊的 YYB 想出了一道无聊的题:无聊的数列。。。

题目描述

维护一个数列 a i a_i ai​,支持两种操作:

  • 1 l r K D:给出一个长度等于 r − l + 1 r-l+1 r−l+1 的等差数列,首项为 K K K,公差为 D D D,并将它对应加到 [ l , r ] [l,r] [l,r] 范围中的每一个数上。即:令 a l = a l + K , a l + 1 = a l + 1 + K + D … a r = a r + K + ( r − l ) × D a_l=a_l+K,a_{l+1}=a_{l+1}+K+D\ldots a_r=a_r+K+(r-l) \times D al​=al​+K,al+1​=al+1​+K+D…ar​=ar​+K+(r−l)×D。

  • 2 p:询问序列的第 p p p 个数的值 a p a_p ap​。

输入格式

第一行两个整数 n , m n,m n,m 表示数列长度和操作个数。

第二行 n n n 个整数,第 i i i 个数表示 a i a_i ai​。

接下来的 m m m 行,每行先输入一个整数 o p t opt opt。

若 o p t = 1 opt=1 opt=1 则再输入四个整数 l   r   K   D l\ r\ K\ D l r K D;

若 o p t = 2 opt=2 opt=2 则再输入一个整数 p p p。

输出格式

对于每个询问,一行一个整数表示答案。

样例 #1

样例输入 #1

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

样例输出 #1

6

提示

数据规模与约定

对于 100 % 100\% 100% 数据, 0 ≤ n , m ≤ 1 0 5 , − 200 ≤ a i , K , D ≤ 200 , 1 ≤ l ≤ r ≤ n , 1 ≤ p ≤ n 0\le n,m \le 10^5,-200\le a_i,K,D\le 200, 1 \leq l \leq r \leq n, 1 \leq p \leq n 0≤n,m≤105,−200≤ai​,K,D≤200,1≤l≤r≤n,1≤p≤n。

原题

洛谷P1438——传送门

思路

对区间 [ l , r ] [l,r] [l,r] 加上一个首项为 k k k 公差为 d d d 的等差数列,相当于这个区间加上 k − d ∗ l k-d*l k−d∗l 以及各个位置加上下标乘以公差即 i d x ∗ d idx*d idx∗d。那么我们只需要用线段树维护两个标记 sum1 和 sum2 即可。

代码

#include <bits/stdc++.h>
using namespace std;
using i64 = long long;

int n, m;

#define lc p << 1
#define rc p << 1 | 1

const int maxn = 1e5 + 6;
i64 a[maxn];

struct node
{
    i64 l, r, sum1, sum2;
} tr[maxn * 4];

void build(int p, int l, int r) // p是当前位置,l和r表示区间
{
    if (l == r)
    {
        tr[p] = {l, r, 0, 0};
        return;
    }
    int mid = l + r >> 1;
    build(lc, l, mid);
    build(rc, mid + 1, r);
    tr[p] = {l, r, tr[lc].sum1 + tr[rc].sum1, tr[lc].sum2 + tr[rc].sum2};
}

void update(int p, int l, int r, i64 add1, i64 add2) // 区间加数
{
    if (l <= tr[p].l && r >= tr[p].r)
    {
        tr[p].sum1 += add1;
        tr[p].sum2 += add2;
        return;
    }
    int mid = tr[p].l + tr[p].r >> 1;
    if (l <= mid)
        update(lc, l, r, add1, add2);
    if (r >= mid + 1)
        update(rc, l, r, add1, add2);
}

i64 query(int p, int x, i64 sum1, i64 sum2) // p是当前位置,x表示查询位置
{
    if (tr[p].l == tr[p].r)
    {
        return tr[p].sum1 + sum1 + (tr[p].sum2 + sum2) * (i64)tr[p].l; // 处理等差数列的关键所在
    }
    int mid = tr[p].l + tr[p].r >> 1;
    if (x <= mid)
        return query(lc, x, sum1 + tr[p].sum1, sum2 + tr[p].sum2);
    else
        return query(rc, x, sum1 + tr[p].sum1, sum2 + tr[p].sum2);
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n >> m;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
    }
    build(1, 1, n);
    while (m--)
    {
        int op;
        cin >> op;
        if (op == 1)
        {
            int l, r, k, d;
            cin >> l >> r >> k >> d;
            update(1, l, r, k - d * l, d);
        }
        else
        {
            int x;
            cin >> x;
            cout << query(1, x, 0, 0) + a[x] << '\n';
        }
    }

    return 0;
}
P1438 无聊的数列 (三种解法 线段树 / 树状数组) (等差数列 高阶差分 高阶前缀和) 题目链接: P1438 无聊的数列 大致题意 给定一个长度为nnn的序列, 有mmm次如下操作: 1 l r k d 表示给区间[l,r][l, r][l,r]加上一个首项为kkk, 公差为ddd的等差数列. 2 pos表示查询pospospos位置的数值是多少. 解题思路 写在前面: 如果你没有做过静态区间加等差数列, 推荐博客➡️点这里⬅️ 思路一: 线段树维护差分 一般的区间修改操作, 我们很容易想到用线段树, 但是我们无法直接给某个区间加等差数列, 因为每个位置被修改的数值是不相同的. 我们考虑对 阅读详情

相关推荐

Android14 有线网络静态IP配置:从固件烧录到系统默认设置

本文详细解析了在Android14系统中,如何通过修改系统框架层和设置应用,为设备预设有线网络静态IP地址,实现固件烧录后即具备指定网络配置的功能。文章深入探讨了从扩展SettingsProvider数据库字段、配置默认值,到在设置应用中读取和应用配置的完整流程,旨在解决工业平板、智能终端等设备在无DHCP网络环境中批量部署的痛点,提升开箱即用体验。

lake5的博客 918

【洛谷】P1438 无聊的数列

线段树

CYW_lyr的博客 549

三相SST固态变压器详细设计案例

本案例针对400kVA、30kHz三相固态变压器(SST)开展详细设计,核心采用输入串联输出并联(ISOP)拓扑架构(模块化多电平矩阵变换器M3C简化版),重点完成高频变压器的参数计算、绕组设计、损耗分析及液冷温升验证,同时覆盖系统级架构设计、半导体损耗估算及整机效率优化,全流程基于当前电力电子技术可行性展开。

qq_32103755的博客 3286

洛谷 P1438 无聊的数列

给定一个序列AA1​A2​⋯An​。现在进行m1 l r k dr−l1kdlr2 xAx​。

pystraf的博客 889

GaN制备micro-led(一)

随着第三代半导体 GaN 材料的快速发展,GaN 基 LED 发展迅速并广泛商业化,这 为可见光通信的实现及应用提供了基础。然而,普通商用 LED 的调制带宽只有几十兆 赫兹,并不能很好的满足可见光通信系统高传播速率的需求。为增大调制带宽,针对发 射端 LED 光源部分的改进仍需提高。将光子晶体结构引入 LED 芯片量子阱内部,能够 影响光子寿命和光子传播,进而改变 LED 芯片的调制带宽和光提取效率。结合倒装微 尺寸(Micro)LED 结构,使其封装体积最小化,这使得可见光通信能够更加灵活地.

weixin_45852211的博客 895

【GNSS测试技术(一)】GNSS基础原理介绍

GNSS(全球卫星导航系统)是一种基于卫星信号的定位技术,通过使用分布在地球轨道上的卫星,为用户提供全球范围内的定位、导航和授时服务。

新猿异码的博客 5751

洛谷P1438 无聊的数列

无聊的数列 题目链接 题目大意:给出一个有 nnn 个元素的序列 aaa ,和 mmm 次操作。倘若是修改操作,给出 l,r,a1,dl,r,a_1,dl,r,a1​,d ,意为在 [l,r][l,r][l,r] 这个区间内每个元素加上一个等差数列的元素。询问操作则询问某一个元素的值。 对于这种区间加一个有规律的有序值的问题通常将其转化为与其下标有关,我们假设某个元素的下标为 idxidxidx ,那么对于一次修改操作,其值就会加上 a1+(idx−l)∗da_1+(idx-l)*da1​+(idx−l.

qq_45863710的博客 283

有源滤波电路设计

目录一、低通滤波器1、同相输入低通滤波器(1)一阶低通滤波电路(2)二阶低通滤波电路(压控电压源;Sallen-Key)2、反相输入低通滤波器(1)一阶低通滤波电路(2)二阶低通滤波电路(无限增益多路反馈)二、高通滤波器1、同相输入高通滤波器(1)一阶高通滤波电路(2)二阶高通滤波电路(压控电压源;Sallen-Key)2、反相输入高通滤波电路(1)二阶高通滤波电路(无限增益多路反馈) 一、低通滤波器 1、同相输入低通滤波器 (1)一阶低通滤波电路 即在一阶无源低通滤波器的基础上,加了一个集成运放。 它的

qq_41873236的博客 3万+

python123反素数_洛谷蓝题解题报告(2020.8.4-2020.8.9)

2020.8.4P1450 [HAOI2008]硬币购物考察:背包dp,容斥原理主要是一个dp容斥的思想:用背包处理无数量限制的方案值,减去某些硬币超出数量限制的方案值。减去不合规范方案的方法:直接将总的钱数减去(该硬币数+1)*该硬币价值进行dp,确保该硬币超出限制。最后套一下容斥原理的公式即可。P1438 无聊的数列考察:线段树,差分区间求和,区间修改,自然想到线段树,以等差数列的方式修改,自...

weixin_32561885的博客 479

Embarcadero Dev-C++ 6.3安装教程【保姆级】

Embarcadero Dev-C++ 6.3安装教程,保姆级教程~

Thebest_jack的博客 1万+

《python算法与数据结构2000讲》算法与数据结构总结

《python算法与数据结构2000讲》算法与数据结构总结

IT 甄选推荐 1103

洛谷 P1438 无聊的数列 题解

本文介绍了洛谷P1438无聊的数列问题的三种解法。首先是暴力解法(91分),但效率不足;其次尝试树状数组单点修改(27分),效果更差。正解采用树状数组+二阶差分,通过数学推导得到高效解法(100分)。最后提及线段树解法(100分,81ms),代码更简洁快速。文章详细展示了从暴力到优化的完整思考过程,并感谢了相关题解的启发。

xzk20121002的博客 475

181、LLC谐振变换器的PCB设计实战(文件归档)

PCB设计实战经验总结:LLC谐振变换器的关键要点 本文通过实际案例总结了LLC谐振变换器PCB设计中的核心经验和常见误区。重点包括: 文件命名规范(项目代号_板卡类型_版本号_日期格式) 四层板标准层叠结构设计要点 谐振回路走线原则(宽度、长度控制) 地线处理技巧(功率地/控制地隔离) 散热设计注意事项(MOSFET过孔阵列、变压器布局) 完整的文件归档清单(Gerber、钻孔、装配图等) 作者特别强调,良好的设计归档习惯能显著降低生产问题概率,建议采用双重备份机制。文中多个真实案例(如谐振频率偏移、EM

Jack010169的博客 42

题解 洛谷P1438 无聊的数列

题解 洛谷P1438 无聊的数列 Date 2019.8,2 题目大意 维护一个数列{a[i]},支持两种操作: 1、1 L R K D:给出一个长度等于R-L+1的等差数列,首项为K,公差为D,并将它对应加到a[L]~a[R]的每一个数上。 即:令a[L]=a[L]+K,a[L+1]=a[L+1]+K+D,a[L+2]=a[L+2]+K+2D……a[R]=a[R]+K+(R-L)D。 2、2 ...

Lificious的博客 431

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【洛谷】【线段树】P1438 无聊的数列

题目背景 无聊的YYB总喜欢搞出一些正常人无法搞出的东西。有一天,无聊的YYB想出了一道无聊的题:无聊的数列。。。(K峰:这题不是傻X题吗) 题目描述 维护一个数列{a[i]},支持两种操作: 1、1 L R K D:给出一个长度等于R-L+1的等差数列,首项为K,公差为D,并将它对应加到a[L]~a[R]的每一个数上。即:令a[L]=a[L]+K,a[L+1]=a[L+1]+K+D, ...

Z_sea的博客 435

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

洛谷-P1438 无聊的数列

P1438 无聊的数列 题目背景 无聊的YYB总喜欢搞出一些正常人无法搞出的东西。有一天,无聊的YYB想出了一道无聊的题:无聊的数列。。。(K峰:这题不是傻X题吗) 题目描述 维护一个数列{a[i]},支持两种操作: 1、1 L R K D:给出一个长度等于R-L+1的等差数列,首项为K,公差为D,并将它对应加到a[L]~a[R]的每一个数上。即:令a[L]=a[L]+K,a[L+1]=...

xu0_zy的博客 397

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

P1438 无聊的数列

题目来源:洛谷 题目背景 无聊的YYB总喜欢搞出一些正常人无法搞出的东西。有一天,无聊的YYB想出了一道无聊的题:无聊的数列。。。(K峰:这题不是傻X题吗) 题目描述 维护一个数列{a[i]},支持两种操作: 1、1 L R K D:给出一个长度等于R-L+1的等差数列,首项为K,公差为D,并将它对应加到a[L]~a[R]的每一个数上。即:令a[L]=a[L]+K,a[L+1]=a[L+...

weixin_30341745的博客 94

线段树-洛谷P1438 无聊的数列

https://www.luogu.org/problem/show?pid=1438 一开始吓死,给区间加上一个等差数列??? 然后就发现我们只要维护题目里说的k,d两个之就好了; 比如我读入是1,x,y,k,d; 那么对于在x~y这个区间里面的小区间l~r 小区间的k,d值相应就是 k’=k+d*(l-x); d’=d; 这个很显然把; 换句话说,x~y变成一个等差序列,那么对

我怎么这么菜的呢 745

洛谷 1438 无聊的数列

【题解】   用线段数维护差分数组即可。 1 #include<cstdio> 2 #include<algorithm> 3 #define ls (u<<1) 4 #define rs (u<<1|1) 5 #define mid ((a[u].l+a[u].r)>>1) 6 #define le...

weixin_30414245的博客 53

【题型总结】等差数列覆盖区间问题

【题型总结】给区间加等差数列求值问题 一、前言: 上一篇题型总结不知道扔哪去了,下午训练看到个很眼熟的题,感觉见过很多次了,就顺手总结下。 需要会的前置知识有:差分与前缀和,树状数组基础,线段树基础 二、UPC 2020年夏混合个人训练第八十场 问题 B: 序列 (二阶差分) 题意: 给定长度为n的数组和m次操作,每次操作都表示将区间[l,r]加上一个首项为s,末项为e的等差数列,求操作后序列每一项的异或和。 思路: 序列[l]+=首项; 序列[l+1]+=公差-首项; 序列[r+1]-=首项+(r-l

我们都有光明的未来 1093

第一章 前缀和算法&差分算法

本章将详细讲解前缀和与差分两种基础核心算法的核心定义、原理、使用场景及代码模板,两种算法是算法竞赛中高频出现的基础优化手段,适配区间操作类题型。本章所有代码案例已统一收录至代码仓库。代码仓库链接前缀和算法是区间求和专用的高效预处理优化算法,核心作用是将多次区间求和的时间复杂度大幅降低,完美解决大数据量区间求和超时问题。在未优化的暴力解法中,若数组长度为 xxx,存在 mmm 次区间查询,单次查询遍历区间长度为 nnn,整体时间复杂度为 O(m⋅n)O(m \cdot n)O(m⋅n)。当数据量达到 1051

zhenghan12的博客 1053

P1438 无聊的数列(洛谷)(线段树_等差数列)

因为加的数是等差数列,等差数列相加依旧是等差数列。而线段树存储的特点又是一个又一个的区间,所以可以在加一个等差数列的同时,用 tag 分别记录当前区间对应的首项和公差。

m0_73949397的博客 190
上一篇: Educational Codeforces Round 166 (Rated for Div. 2) D. Invertible Bracket Sequences 题解 二分查找 ST表 双指针
下一篇: 洛谷 P1678 烦恼的高考志愿 题解 二分查找
bbc_ouo
博客等级 码龄3年 2096粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值