【算法】一个简单的整数问题(树状数组、差分)

news2024/11/25 2:47:25

题目

给定长度为 N 的数列 A,然后输入 M 行操作指令。

第一类指令形如 C l r d,表示把数列中第 l∼r 个数都加 d。

第二类指令形如 Q x,表示询问数列中第 x 个数的值。

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

输入格式

第一行包含两个整数 N 和 M。

第二行包含 N 个整数 A[ i ]。

接下来 M 行表示 M 条指令,每条指令的格式如题目描述所示。

输出格式

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

每个答案占一行。

数据范围

1 ≤ N,M ≤ 10^5
|d| ≤ 10000
|A[i]| ≤ 10^9

输入样例:
10 5
1 2 3 4 5 6 7 8 9 10
Q 4
Q 1
Q 2
C 1 6 3
Q 2
输出样例:
4
1
2
5

思路

         我们可以使用树状数组维护差分数组,这样更改与查询的时间复杂度均为O(log(n))。

得到树状数组

1214121812

若更新某一区间的值,需要更改[l,r+1)的值,但是在差分数组中只需更改 l 与 r + 1的值。

若要取某个点的值,只需求一下差分数组的前缀和,得到的值就为该点的实际值。

 

代码 

#include<bits/stdc++.h>
#define int long long
#define N 100010
using namespace std;

int n,m;
int a[N];
int tr[N];

int lowbit(int x)
{
    return x & -x;
}

void add(int x,int c)
{
    for(int i = x; i <= n; i += lowbit(i)) tr[i] += c;
}

int sum(int x)
{
    int res = 0;
    while(x)
    {
        res += tr[x];
        x -= lowbit(x);
    }
    return res;
}

int32_t main()
{
    cin >> n >> m;
    for(int i = 1; i <= n; i ++) cin >> a[i];
    for(int i = 1; i <= n; i ++) add(i,a[i] - a[i - 1]);// 使用树状数组维护差分数组
    while(m --)
    {
        string op;
        int l,r,d;
        cin >> op >> l;
        if(op == "C")
        {
            cin >> r >> d;
            add(l,d),add(r + 1, -d);// 在差分数组的[l ~ r + 1)之间的数全部加d
        }
        else
        {
            cout << sum(l) << endl;
        }
    }
    return 0;
}

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

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

相关文章

leetcode面试经典150题——33 最小覆盖子串(滑动窗口)

题目&#xff1a; 最小覆盖子串 描述&#xff1a; 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 “” 。 注意&#xff1a; 对于 t 中重复字符&#xff0c;我们寻找的子字符串中…

MySQL双主双从数据库集群搭建

1 引言 在之前的文章中提到过相关搭建方法&#xff0c;具体请参考《MySQL主从数据库搭建》这篇文章&#xff0c;本文主要讲述双主双从&#xff0c;双主多从集群的搭建方式。 这里要问一个问题&#xff0c;为什么MySQL要搭建数据库集群呢&#xff1f;我想应该有以下几点原因&…

figma 基础使用 —— 常用方法

一、 导入组件 分成两种方式 &#xff08;1&#xff09;离线的包导入&#xff08;iOS 常用组件.fig 直接拖拽到figma最近网页&#xff09; &#xff08;2&#xff09;在插件市场下载https://www.figma.com/community 二、figma中使用标尺 快捷键&#xff1a;shift R 三、插…

爬虫学习 异步爬虫(五)

多线程 多进程 协程 进程 运行中的程序 线程 被CPU调度的执行过程,操作系统 运算调度的min单位 在进程之中,进程中实际运作单位 from threading import Thread#创建任务 def func(name):for i in range(100):print(name,i)if __name__ __main__:#创建线程t1 Thread(target …

SP3109 STRLCP - Longest Common Prefix 题解

SP3109 STRLCP - Longest Common Prefix 题解 某省某年省选原题出处&#xff0c;看来 CCF 出原题这事由来已久。 简化题意 让你维护一个字符串序列。支持单点修改。支持单点插入。支持询问两个子串的最长公共前缀。 解法 本篇题解前置芝士&#xff1a;无旋 Treap&#xff…

孔明棋,(n + 2) x (m + 2)的棋盘,中间n x m的区域都是棋子,求最后最少剩余几个棋子

题目 #include <iostream> using namespace std; int f(int n, int m) {int t, res;if (n > m){t n;n m;m t;}if (n 1)res (m 1) / 2;else if (n 2){if (m % 3 0)res 2;elseres 1;}else if (n 3){res 2;}return res; } int change(int x) {x % 3;if (x 0…

OpenHarmony亮相MTSC 2023 | 质量效率共进,赋能应用生态发展

11月25日&#xff0c;MTSC 2023第十二届中国互联网测试开发大会在深圳登喜路国际大酒店圆满举行。大会以“软件质量保障体系和测试研发技术交流”为主要目的&#xff0c;旨在为行业搭建一个深入探讨和交流的桥梁和平台。OpenAtom OpenHarmony&#xff08;简称“OpenHarmony”&a…

AI一键生成文案-免费AI一键生成文案的软件有哪些

AI一键生成文案的原理涉及自然语言处理&#xff08;NLP&#xff09;和机器学习技术。这种技术的核心是基于大量文本数据的模式识别和生成&#xff0c;通常使用深度学习模型&#xff0c;如循环神经网络&#xff08;RNN&#xff09;、长短期记忆网络&#xff08;LSTM&#xff09;…

六、Lua运算符

文章目录 一、Lua 运算符&#xff08;一&#xff09;算术运算符&#xff08;二&#xff09;关系运算符&#xff08;三&#xff09;逻辑运算符&#xff08;四&#xff09;其他运算符 二、运算符优先级 一、Lua 运算符 运算符是一个特殊的符号&#xff0c;用于告诉解释器执行特定…

【双指针】四数之和

四数之和 建议做过了解三数之和的思想再做这道题&#xff0c;思路是一样的~ 题目描述 18. 四数之和 - 力扣&#xff08;LeetCode&#xff09; 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [num…

第1章 理解知识图谱(一)

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

大模型的开源闭源

文章目录 开源&闭源开源和闭源的优劣势比较开源和闭源对大模型技术发展的影响开源与闭源的商业模式比较国内的大模型开源和闭源的现状和趋势 开源和闭源&#xff0c;两种截然不同的开发模式&#xff0c;对于大模型的发展有着重要影响。 开源让技术共享&#xff0c;吸引了众…

【objectarx.net】table问题2:添加table后,保存时出错

添加table后&#xff0c;保存时出现以上对话框。 原因&#xff1a; tb.TableStyle db.Tablestyle; 对于这句代码&#xff0c;tb所在的数据库和db不是同一个。

数据库SQL小技巧大揭秘:IGNORE选项让你的数据处理更从容

点击上方蓝字关注我 在 MySQL 中&#xff0c;IGNORE 是一种在插入或更新数据时处理冲突的选项。具体来说&#xff0c;在 INSERT | UPDATE 语句中&#xff0c;IGNORE 的作用是在插入或更新数据时忽略特定的错误&#xff0c;而不导致整个操作失败。另外&#xff0c;IGNORE 选项还…

开发定制化抖音票务小程序的技术解析

通过定制化抖音票务小程序&#xff0c;可以为用户提供更加个性化的活动体验&#xff0c;同时也为企业和品牌提供了更多的营销机会。 一、小程序开发框架的选择 在开发定制化抖音票务小程序之前&#xff0c;选择合适的小程序开发框架至关重要。目前&#xff0c;主流的小程序框…

如何用Python批量删除视频的头尾(88)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 关注我&#xff0c;一起趣味学编程&#xff01; 今天我们继续用Python玩转视频。 还是用Python的第三方库moviepy。 如果你对此文章感兴趣的话&#xff0c;可以看看之前的…

mysql 命令行导入sql 数据,windows导入,强制导入

线上用了polarDB&#xff0c; 本地导入的时候&#xff0c;通过navicat 的备份导入和执行sql文件的方式导入都失败了 用命令行的方式可以导入sql 当我用windows 的cmd 导入的时候&#xff0c;会报一些命令行的错误。 那其实我检查了这个命令是没有问题的。 mysql -uroot -p hu…

文本生成超逼真歌曲,谷歌推出音乐模型Lyria

转换示例 谷歌旗下的DeepMind与视频平台YT合作&#xff0c;发布了目前最先进的音乐模型——Lyria。 为了突破传统音乐模型的生硬机器感&#xff0c;谷歌汇集了多个部门并与Charlie Puth、T-Pain、Troye Sivan等9位知名音乐人共同研发了Lyria。 Lyria可生成爵士、重金属、摇滚…

配置zabbix-proxy主动式

IP地址对应关系如下&#xff1a; zabbix-server122.9.8.21zabbix-proxy122.9.4.102zabbix-agent2116.63.9.109 一、 安装zabbix-server https://blog.csdn.net/qq_50247813/article/details/132131774 二、 安装zabbix-proxy a. 安装zabbix源 rpm -Uvh https://repo.zabbix…

Swift构造器继承链

类类型的构造器代理 Swift构造器需遵循以下三大规则&#xff1a; 指定构造器必须调用它直接父类的指定构造器方法便利构造器必须调用同一个类中定义的其他初始化方法便利构造器在最后必须调用一个指定构造器 两段式构造过程 Swift 中类的构造过程包含两个阶段。第一个阶段&a…