news 2026/4/18 5:32:58

小陶的疑惑2

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
小陶的疑惑2
题目描述

解决了助教给出的第一个问题后,小陶对数据结构的兴趣被点燃了,他央求助教给他出了第二个问题:

给出一个有n个元素的序列(n<=200000),进行m次操作,操作有两种类型:

1 x y c: 给都加上c

2 x:输出的值

输入格式

第一行两个整数n,m

接下来m行,每行2个或4个整数,表示一个操作,格式见题面

输出格式

对于每个操作2,输出对应的结果

样例

【样例僌】

5 5 1 5 4 2 3 1 2 4 2 2 3 1 1 5 -1 1 3 5 7 2 4

【样例输出】

6 10
数据范围与提示

对于30%的数据: n<=5000

对于60%的数据: n<=30000

对于100%的数据: n<=200000

一些想法

这道题依旧用树状数组做。

但是他用到了区间修改和的思想,具体看上一篇。

这次的树状数组是差分数组,差分数组是用当前数减上一个数得来的。

代码解析:输入序列的每一个数,在第 i 个位置增加当前数减上一个数的值,也就是将当前数减上一个数的值放进树状数组,然后上一个数更新为当前数(为下次相减提供数据)。

然后循环输入操作,如果操作类型是 1,输入左边界、右边界和增加的值,然后左边界到 n 增加,右边界加一到 n 减,因为要求的是左边界到右边界,但是修改函数是某个数到最后一个值都增加,这就不符合题目要求,所以我们先将左边界到 n 照常增加,然后将右边界后一个值负增加,这样就只会增加左边界到右边界的数,右边界后面的数会被抵消,这样就能达到目的了。

如果是查询操作,这个直接查询第 x 个数就行了,直接调用函数输出就行了。

自定义函数部分:

lowbit 函数:用位运算找 x 二进制的最后一个 1 。树状数组的所有操作都基于 lowbit 实现区间划分。

查询函数:查询 x,然后只要 x 大于 0(没有超出范围),然后将 x 不断减小(减自己的lowbit),跳转到前一个区间,将数增加。(简单来说就是分解,将当前区间不断分解成多个小区间),查询 a[x] 也就是 x 在树状数组中的表示的数,直接调用就行了。

修改函数:将第 x 个数增加 y ,因为前面的点有变化,所以包含这个点的在范围内的所有数都要跟着变化,因为父节点要随着子节点的变化而变化,所以每次增加自己的 lowbit ,也就是不断往后一个区间,直到达到边界,然后每一个区间都增加指定值。

AC代码

#include<bits/stdc++.h> using namespace std; long long n,m,c[200005]; int lowbit(int x){ return x&-x; } void zs(int x,int y){ for(;x<=n;x+=lowbit(x)) c[x]+=y; } int sm(int x){ int sum=0; for(;x>0;x-=lowbit(x)) sum+=c[x]; return sum; } int main(){ cin>>n>>m; int r,l,x,op,last,now; for(int i=1;i<=n;i++){ cin>>now; zs(i,now-last); last=now; } for(int i=1;i<=m;i++){ cin>>op; if(op==1){ cin>>l>>r>>x; zs(l,x); zs(r+1,-x); } if(op==2){ cin>>x; cout<<sm(x)<<endl; } } return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 4:03:29

IDE试用期管理工具:JetBrains工具延长使用的高效管理方案

IDE试用期管理工具&#xff1a;JetBrains工具延长使用的高效管理方案 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 在软件开发过程中&#xff0c;JetBrains系列IDE以其强大的功能和出色的用户体验深受开发者青睐…

作者头像 李华
网站建设 2026/4/17 6:15:54

【2026开发者生存指南】:为什么92.3%的SRE团队已悄悄切换至VSCode新日志插件——基于17家头部科技公司生产环境压测数据

第一章&#xff1a;VSCode 2026日志分析插件的演进逻辑与设计哲学 VSCode 2026日志分析插件并非对旧有工具的简单功能叠加&#xff0c;而是基于开发者在云原生可观测性场景中暴露出的三大矛盾重构设计内核&#xff1a;实时性与资源开销的张力、结构化语义与非结构化文本的鸿沟、…

作者头像 李华
网站建设 2026/4/18 4:04:30

多模态对齐失败全归因分析,深度解析MCP 2026标准下CLIP/Flamingo/Multinerf三类模型的隐空间漂移临界点

第一章&#xff1a;多模态对齐失败的系统性归因框架多模态对齐失败并非孤立现象&#xff0c;而是由数据、模型、优化与评估四个维度深层耦合引发的系统性偏差。当视觉特征向量与文本嵌入在共享语义空间中无法形成稳定几何关系时&#xff0c;下游任务性能将呈现非线性退化&#…

作者头像 李华
网站建设 2026/4/18 4:04:58

实测Yi-Coder-1.5B代码生成:Ollama部署+128K长文本处理演示

实测Yi-Coder-1.5B代码生成&#xff1a;Ollama部署128K长文本处理演示 1. 为什么这款1.5B参数的代码模型值得你花5分钟试试 你有没有遇到过这样的场景&#xff1a; 看着一份3000行的Python脚本&#xff0c;想快速理解核心逻辑&#xff0c;但逐行读太耗时&#xff1b;需要把一…

作者头像 李华
网站建设 2026/4/18 4:04:27

YOLOv9官方镜像使用全记录,新手避坑指南来了

YOLOv9官方镜像使用全记录&#xff0c;新手避坑指南来了 你是不是也经历过这样的时刻&#xff1a; 刚下载完YOLOv9镜像&#xff0c;满怀期待地启动容器&#xff0c;结果卡在conda activate yolov9这一步——终端报错“Command not found”&#xff1f; 或者好不容易跑通了推理…

作者头像 李华
网站建设 2026/4/18 4:04:25

6个高效实用技巧:DownKyi帮你轻松解决B站视频下载难题

6个高效实用技巧&#xff1a;DownKyi帮你轻松解决B站视频下载难题 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#…

作者头像 李华