P1438 无聊的数列

news/2025/3/11 3:13:46/文章来源:https://www.cnblogs.com/zzzsacmblog/p/18622561

链接:https://www.luogu.com.cn/problem/P1438
题面:

思路:
差分+线段树。
刚开始的想法是建立一个双tag线段树:basetag和addtag。然后传递的时候basetag就是l的基准,addtag不变。求的话就是求节点值。
但是这样容易溢出。。。
所以考虑差分:利用前缀和代替当前某一点的值:query(1,n) = val[n]
所以:注意点

  • 初始数据的输入
    采用后到前差分的形式,确保前缀和是当前值。
    代码:
    for (ll i = 1; i <= n; i++)cin >> a[i];
    for (ll i = n; i >= 1; i--)a[i] -= a[i - 1];
    
  • tag的使用
    实际上这里的tag就相当于[l+1,r]的区间里面都加上一个delta。然后[l]处加上一个base。[r]处加上一个-base-(r-l)*delta
    update(L , L, 1, 1, n, base);
    update(R+1, R+1, 1, 1, n, -base-(R-L)*d);
    update(L+1, R, 1, 1, n, d);
    
  • 最后添加条件判断
    注意到只有R不比n大的时候才可以添加补偿数,以及L小于R的时候才可以添加d。
    update(L , L, 1, 1, n, base);
    if(R<n)update(R+1, R+1, 1, 1, n, -base-(R-L)*d);
    if(L<R)update(L+1, R, 1, 1, n, d);
    

总的代码:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
typedef long long ll;
const int N = 1e5 + 10;
ll a[N];
ll tree[N << 2];
ll tag[N << 2];ll ls(ll p)
{return p << 1;
}
ll rs(ll p)
{return p << 1 | 1;
}
void push_up(ll p)
{tree[p] = tree[ls(p)] + tree[rs(p)];//从下往上传递 
}
void build(ll p, ll pl, ll pr)
{tag[p] = 0;if (pl == pr) { tree[p] = a[pl]; return; }ll mid = (pl + pr) >> 1;build(ls(p), pl, mid);build(rs(p), mid + 1, pr);push_up(p);
}
void addtag(ll p, ll pl, ll pr, ll d)
{//改,加上tag的作用 tag[p] += d;tree[p] += d * (pr - pl + 1);
}void push_down(ll p, ll pl, ll pr)
{if (tag[p]){ll mid = (pl + pr) >> 1;addtag(ls(p), pl, mid,tag[p]);addtag(rs(p), mid + 1, pr,tag[p]);tag[p] = 0;}
}
void update(ll L, ll R, ll p, ll pl, ll pr, ll d)
{if (L <= pl and pr <= R){addtag(p, pl, pr, d);return;}push_down(p, pl, pr);ll mid = (pl + pr) >> 1;if (L <= mid)update(L, R, ls(p), pl, mid, d);if (R > mid)update(L, R, rs(p), mid + 1, pr, d);push_up(p);
}ll query(ll L, ll R, ll p, ll pl, ll pr)
{if (pl >= L and R >= pr)return tree[p];push_down(p, pl, pr);ll res = 0;ll mid = (pl + pr) / 2;if (L <= mid)res += query(L, R, ls(p), pl, mid);if (R > mid)res += query(L, R, rs(p), mid + 1, pr);return res;
}signed main()
{IOS;ll n, m;cin >> n >> m;for (ll i = 1; i <= n; i++)cin >> a[i];for (ll i = n; i >= 1; i--)a[i] -= a[i - 1];build(1, 1, n);while (m--){ll q, L, R, d;cin >> q;if (q == 1){ll base;cin >> L >> R >>base>> d;update(L , L, 1, 1, n, base);if(R<n)update(R+1, R+1, 1, 1, n, -base-(R-L)*d);if(L<R)update(L+1, R, 1, 1, n, d);}else {cin  >> R;cout << query(1, R, 1, 1, n)<<'\n';}}return 0;
}

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

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

相关文章

2024.12.22

数学归纳法常用公式\((a+b)^n\) \((a+b)^n\)的系数是杨辉三角的某一层,a升幂排列,b降幂排列 同理可得\((a-b)^n\),可以看作(\(a+(-b))^2\),与上面相同。

【PHP安全】php程序源码保护技术

一、基本介绍二、加密方式2.1 源码混淆处理2.1.1 PHP 威盾混淆2.1.2 php-obfuscator2.2 YAK Pro混淆处理2.3 源码外壳加密2.3.1 PHP Eval加密2.3.2 PHP Eval变异2.3.3 phpjiami处理2.4 源码扩展加密2.4.1 php-beast2.4.2 Zend Guard文末小结一、基本介绍 PHP语言作为脚本语言的…

[长期活动] 【4Z-API】每5楼抽取1位送10美金API额度,20%中奖机会!

​ 活动详情 活动时间: 长期有效 奖励内容: 每5楼抽取1位幸运用户,送价值10美金API额度 ** 参与方式** 登录 4Z API域名巧记:ZZZZAPI.com 4个Z然后API 简单好记:4Z= ZZZZAPI.com 每5个楼层将抽取1位幸运用户4Z-API优势稳定高速的API服务超值定价,性价比之选7x24小时技术支持…

CW信号的正交解调

1.CW信号CW可以叫做等幅电报,它通过电键控制发信机产生短信号"."(点)和长信号"--"(划),并利用其不同组合表示不同的字符,从而组成单词和句子。CW信号可以看作一种幅度调制信号,类似于幅移键控(2ASK信号)其携带的信息保存在其幅度中,通过改变载波…

团队作业3

团队作业3--需求改进&系统设计这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13233这个作业的目标 修改完善需求规格说明书、系统设计、Alpha任务分配计划、测试计…

Authz0:自动化授权测试工具

免责声明 本文提供的资源仅供学习,利⽤本文所提供的信息而造成的任何直接或者间接的后果及损失,均由使⽤者本⼈负责,本文及作者不为此承担任何责任,一旦造成后果请自行承担责任!简介 Authz0 是一款自动化授权测试工具。可以根据URL和角色与凭证识别未经授权的访问。URL和角…

戴尔T3680工作站 改造虚拟工作站,满足多人设计需求

在戴尔 T3680 工作站作为通过了 NVIDIA vWS兼容性认证的工作站,部署 Proxmox VE 和 DoraCloud,可以实现工作站虚拟化,满足多个用户设计需求。可以顺畅运行 SolidWorks、NX/UG 等大型CAD软件。满足企业 资源共享、信息安全、远程设计的业务需求。最近拿到一台 戴尔 T3680 工作…

HDU3746-Cyclic Nacklace

继续跟着邝斌飞刷KMP HDOJ3746 百度的时候发现题目英语弄错了,项链英文是Necklace,不是Nacklace读完之后我滴妈,上难度了呀 题意:就是给你个字符串a~z,,###:妈逼的不知道咋回事百度那个搜索不知道是不是总更新网页html一些东西,ADblock拦截又tm不好使了,还得重新拦截。…

天嵌通途xczu15eg学习笔记——基于iwip的TCP服务器性能测试(一)

学习记录——基于iwip的TCP服务器性能测试(一) 环境如下,Windows10,vivado2020.2 硬件部分设置如下:PS-PL之间的交互时钟,复位已关闭 Generate Output Products,Create HDL Wrapper,Export Hardware之后进入vitis开发环境 选择IwIP TCP Perf Server模版 打开Terminal中的…

PERIODNI

思路 哇, 看到这个就直接想到昨天学的经典应用 : 最大子矩形 好吧还是认真推一下 完蛋了是计数, 我们没救了 首先按照高度为优先级, 位置为键值建一颗小根笛卡尔树, 我们玩下样例找下性质 例如题目中给出的图片, 我们建成笛卡尔树就长这样其中每个点由 \(\{键值, 优先级\}\) 组…

2024-2025-1 20241421 《计算机基础与程序设计》第十三周学习总结

这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计 这个作业要求在哪里 2024-2025-1计算机基础与程序设计第十三周作业 这个作业的目标 复习知识,巩固所学 作业正文 https://www.cnblogs.com/118qa/p/18622459 教材学习内容总结概念 结构体是一种用户自定义的数据类型,…

Shell脚本编程题(八道)

Linux操作系统期末编程题——Shell脚本编程题(八道) 第一题 1.编程实现从键盘获取一个整数,按下列情况输出对应结果: (1)当该数值为 6 或 7 时,输出“休息日(Rest Day)”。 (2)当该数值为 1 至 5 时,输出“工作日(Working Day)”。 (3)其他情况输出“输入错误(E…