首页 > 其他分享 >树状数组(区间修改&&区间查询)

树状数组(区间修改&&区间查询)

时间:2024-01-26 17:13:19浏览次数:24  
标签:&& 树状 int long num 100010 区间

#include<bits/stdc++.h>	
#define int long long
using namespace std;
int n,m,x,x1,y,z;
int a[100010],d[100010],c[100010];
int lowbit(int num){return num&-num;}
void add(int x,int y){
	int a=x;
	while(x<=n) d[x]+=y,c[x]+=(a-1)*y,x+=lowbit(x);
	return;
}
int get(int x){
	int ans=0,ans1=0,a=x;
	while(x) ans+=d[x],ans1+=c[x],x-=lowbit(x);
	return ans*a-ans1;
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;++i) scanf("%ld",&a[i]),add(i,a[i]-a[i-1]);
	for(int i=1;i<=m;++i){
		scanf("%ld",&x);
		if(x==1){
			scanf("%ld%ld%ld",&x1,&y,&z);
			add(x1,z);
			add(y+1,-z);
		}else{
			scanf("%ld%ld",&y,&z);
			cout<<get(z)-get(y-1)<<endl;
		}
	}
	return 0;
}

标签:&&,树状,int,long,num,100010,区间
From: https://www.cnblogs.com/wenzhihao2023/p/17989791

相关文章

  • 正常数组转换为树状结构
    1、这里子元素的标识是menuId,父id是parentId//转化后的树形结构数据getTree(menuList){letmenus=[];letsourceMap={};menuList.forEach(item=>{item.children=[];......
  • java 判断数字在某个区间的语法
    Java判断数字在某个区间的语法介绍区间判断语法if语句switch语句示例代码总结介绍在Java编程中,经常需要判断一个数字是否在某个区间内。例如,判断一个学生成绩是否及格,判断一个年龄是否在合法范围等。本文将介绍Java中判断数字在某个区间的语法,并给出相应的代码示例。......
  • P3374 【模板】树状数组 1(线段树)
    【模板】树状数组1题目描述如题,已知一个数列,你需要进行下面两种操作:将某一个数加上x求出某区间每一个数的和输入格式第一行包含两个正整数n,m,分别表示该数列数字的个数和操作的总个数。第二行包含n个用空格分隔的整数,其中第i个数字表示数列第i项的初始值......
  • P3374 【模板】树状数组 1
    part1#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;structnode1{intl,r,value;};node1node[2000020];inta[500010];voidmt(intp,intl,intr){intmid=(l+r)>>1;node[p].l=l;node[p].r=r;if(l==r)......
  • P3368 【模板】树状数组 2
    #include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintMax=500005;inta[Max];intn,m;intlowbit(intx){ returnx&-x;}voidadd(intx,inty){ while(x<=n){ a[x]+=y; x+=lowbit(x); }}intsum(intx)......
  • Ybt 金牌导航 6.3.A. 区间众数 / P4168 [Violet] 蒲公英(分块)
    题意简述多次查询区间\([l,r]\)的众数,若有多个取数值最小的。强制在线。\(n\le4\times10^4,m\le5\times10^4\)。分析考虑分块。首先预处理出块区间内的众数\(maj_{l,r}\)和每种数在某个块的前缀的出现次数\(cnt_{i,a_i}\),时空复杂度都是\(O(n\sqrtn)\)的。对于询......
  • 静态区间查询(条件动态)——ST表
    目录问题引入思路一览具体分析条件动态?问题引入给出一个长度为n的数组a,并且给出m咨询问,每次询问给出边间lt和rt,要求给出lt和rt之间的最大值思路一览暴力法:记录数组,对于每一次询问,就从lt到rt遍历一遍ST:对数组的区间做一个倍增处理,将每一个区间的答案记录下来,最后使用区间进行......
  • LOJ3990/LG9602 IOI2023 足球场 题解 (区间DP+精简无用状态)
    首先考虑一个足球场长啥样才是合法的。发现一个点能只拐弯一次到达另一个点,可以分为两种情况:先左右走,再上下走或先上下走,后左右走。无论哪种情况,都要求我们走一步使得和目标点一个轴相同,再走一步使得另一个轴也相同,所以加入把每一行选择的格子看成一个区间(因为如果不连续显然是......
  • 【LeetCode 2494. 合并在同一个大厅重叠的活动】[MySQL 用户变量/Pandas]面向过程编程
    目录题目地址MySQL代码等效pandas代码题目地址https://leetcode.cn/problems/merge-overlapping-events-in-the-same-hall/MySQL代码#WriteyourMySQLquerystatementbelowwitht2as(select*#----只需要改动这里的逻辑,其他不要动。注意里面的语句是“顺序......
  • (区间覆盖问题)P5019 [NOIP2018 提高组] 铺设道路和Educational Codeforces Round 158 (
    区间覆盖问题这里EducationalCodeforcesRound158(RatedforDiv.2)b题和[NOIP2018提高组]铺设道路两道典型题目,本质是相同的。这里由于题目多次出现,特此记录。解题思路:首先我们得对区间做划分,那么划分思路可以是从小到大也可以是从大到小的异常点来做划分(我这是由大到......