243. 一个简单的整数问题2(树状数组)

这篇具有很好参考价值的文章主要介绍了243. 一个简单的整数问题2(树状数组)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

243. 一个简单的整数问题2(树状数组),AcWing,算法,数据结构,c++,c语言,开发语言

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

 解析:

        一般树状数组都是单点修改、区间查询或者单点查询、区间修改。这道题都是区间操作。

        243. 一个简单的整数问题2(树状数组),AcWing,算法,数据结构,c++,c语言,开发语言

 

        1. 区间修改用数组数组维护差分数组

        2. 区间查询,需要log计算两个端点的前缀和。上图右侧,可以得出,计算前缀和需要维护差分序列和  i*b[ i ] 的差分序列。文章来源地址https://www.toymoban.com/news/detail-625802.html

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5;
ll n,m,a[N],b[N],tr1[N],tr2[N];
int lowbit(int x){
	return x&-x;
}
void add1(int x,ll k){
	for(int i=x;i<=n;i+=lowbit(i)) tr1[i]+=k;
}
void add2(int x,ll k){
	for(int i=x;i<=n;i+=lowbit(i)) tr2[i]+=k;
}
ll sum(int x){
	ll ans=0;
	for(int i=x;i;i-=lowbit(i)) ans+=tr1[i];
	ans*=x+1;
	for(int i=x;i;i-=lowbit(i)) ans-=tr2[i];
	return ans;
}
int main(){
	scanf("%lld%lld",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		b[i]=a[i]-a[i-1];
		add1(i,b[i]);
		add2(i,i*b[i]);
	}
	while(m--){
		char op;
		cin>>op;
		if(op=='C'){
			int l,r,d;
			scanf("%lld%lld%lld",&l,&r,&d);
			add1(l,d);
			add1(r+1,-d);
			add2(l,d*l);
			add2(r+1,-d*(r+1));
		}
		else{
			int x,y;
			scanf("%lld%lld",&x,&y);
			printf("%lld\n",sum(y)-sum(x-1));
		}
	}
	return 0;
}

到了这里,关于243. 一个简单的整数问题2(树状数组)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【算法 & 高级数据结构】树状数组:一种高效的数据结构(一)

    🚀 个人主页 :为梦而生~ 关注我一起学习吧! 💡 专栏 :算法题、 基础算法~赶紧来学算法吧 💡 往期推荐 : 【算法基础 数学】快速幂求逆元(逆元、扩展欧几里得定理、小费马定理) 【算法基础】深搜 树状数组 (Binary Indexed Tree,BIT)是一种数据结构,用于高效地处理

    2024年03月11日
    浏览(52)
  • 【算法 & 高级数据结构】树状数组:一种高效的数据结构(二)

    🚀 个人主页 :为梦而生~ 关注我一起学习吧! 💡 专栏 :算法题、 基础算法、数据结构~赶紧来学算法吧 💡 往期推荐 : 【算法基础 数学】快速幂求逆元(逆元、扩展欧几里得定理、小费马定理) 【算法基础】深搜 数据结构各内部排序算法总结对比及动图演示(插入排序

    2024年03月26日
    浏览(75)
  • 【算法每日一练]-结构优化(保姆级教程 篇4 树状数组,线段树,分块模板篇)

    目录 分块 分块算法步骤: 树状数组 树状数组步骤: 线段树点更新 点更新步骤: 线段树区间更新 区间更新步骤: 不同于倍增和前缀和与差分序列。 前缀和处理不更新的区间和 差分处理离线的区间更新问题 倍增处理离线的区间最值问题 分块,树状数组,线段树: 分块处

    2024年02月04日
    浏览(34)
  • 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。(哈希法)

    思路: 当题意中需要判断某个元素是否出现过,或者某个元素是否在这个集合里出现过。 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组

    2024年02月08日
    浏览(34)
  • 如何使用快速排序算法对整数数组进行就地排序?

    快速排序算法是最常用的排序算法之一,尤其是对大型列表进行排序时,大多数编程语言、库都以一种或另一种方式实现了它。在 Java 中,Arrays.sort()方法使用由 Joshua Bloch 等人编写的双枢轴 快速排序 算法对原始数据类型进行排序。这种实现为大量数据集提供了更好的性能,

    2024年02月01日
    浏览(35)
  • AcWing:90. 64位整数乘法

    算法标签:位运算 来源:《算法竞赛进阶指南》 描述 求 a 乘 b 对 p 取模的值。 输入格式 第一行输入整数a,第二行输入整数b,第三行输入整数p。 输出格式 输出一个整数,表示 a*b mod p 的值。 数据范围 1≤a,b,p≤10^18 输入样例: 输出样例:

    2024年01月18日
    浏览(22)
  • AcWing90. 64位整数乘法

    求 a a a 乘 b b b 对 p p p 取模的值。 第一行输入整数 a a a ,第二行输入整数 b b b ,第三行输入整数 p p p 。 输出一个整数,表示 a*b mod p 的值。 1 ≤ a , b , p ≤ 1 0 18 1≤a,b,p≤10^{18} 1 ≤ a , b , p ≤ 1 0 18 C++ 内置的最高整数类型是 64 位,现在 a ∗ b a * b a ∗ b mod p p p 中的三个变量

    2024年02月08日
    浏览(21)
  • C语言深度剖析,关于查找一个数组里面的最大值(max)、最小值(min)的通俗算法,简单易懂。采用比较法进行查找。

    这里采用了一个假设 假设第一个数为最大值,其他数与第一个数比较。 这个算法与上面求解最大值的方法相反。 1、首先,定义行和列。 用行标记来确定列的数量。 i 来表示行, j来表示列。 2、内嵌的for循环只打印一行所有列。 如,i=3时,此时j=3. 从1*3 遍历到3*3后内嵌循环

    2024年02月08日
    浏览(34)
  • acwing算法基础之动态规划--背包问题

    (零) 背包问题描述:有 N N N 个物品,每个物品的体积是 v i v_i v i ​ ,价值是 w i w_i w i ​ ,现有容量是 V V V 的背包,求这个背包能装下的物品的最大价值。 01背包问题:每个物品只有1个。 完全背包问题:每个物品有无穷多个。 多重背包问题:第 i i i 个物品有 s i s_i s

    2024年02月05日
    浏览(37)
  • 【每日挠头算法题】Leetcode 989. 数组形式的整数加法 —— 高精度加法解法

    👑作者主页:@进击的安度因 🏠学习社区:进击的安度因(个人社区) 📖专栏链接:每日挠头算法题 如果无聊的话,就来逛逛 我的博客栈 吧! 🌹 今天为大家带来的是力扣上的一道简单题:数组形式的整数加法。这道题我在2个月前就尝试过,但是没有解答出来。两个月后

    2024年01月25日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包