首页 > 其他分享 >树状数组【区间修改+单点查询】

树状数组【区间修改+单点查询】

时间:2025-01-13 09:44:21浏览次数:1  
标签:ch const 树状 int updata ll 数组 using 单点

https://www.luogu.com.cn/problem/P3368

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define lowbit(x)  x&(-x)
using ll = long long;
using pii = pair<int, int>;
const double PI = acos(-1);
const int N = 5e5 + 10;
const int mod = 1e9 + 7;
ll c[N],a[N];
int n,m;
void updata(int x,int k){
	for(int i=x;i<=n;i+=lowbit(i))
		c[i]+=k;
}
ll query(int x){
	ll sum=0;
	for(int i=x;i;i-=lowbit((i))){
		sum+=c[i];
	}
	return sum;
}
void solve() {
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++)
	{
		int x=a[i]-a[i-1];
		updata(i,x);
	}	
	while(m--){
		int ch;cin>>ch;
		if(ch==1){
			int x,y,k;cin>>x>>y>>k;
			updata(x,k);
			updata(y+1,-k);

		}
		else{
			int x;cin>>x;
			cout<<query(x)<<endl;
		}
	}
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr), cout.tie(nullptr);
	
	int T = 1;
	//cin>>T;
	while (T--) {
		solve();
	}
	
	return 0;
}

标签:ch,const,树状,int,updata,ll,数组,using,单点
From: https://www.cnblogs.com/laileou/p/18667946

相关文章

  • 写一个获取数组的最大值、最小值的方法
    在前端开发中,获取数组的最大值和最小值是一个常见的需求。你可以使用JavaScript的Math.max()和Math.min()函数结合扩展运算符(...)来实现这个功能。以下是一个简单的示例:functiongetMaxAndMin(arr){if(!Array.isArray(arr)||arr.length===0){return{max:null,m......
  • 树状数组【模板】
    https://www.luogu.com.cn/problem/P3374#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'#definelowbit(x)x&(-x)usingll=longlong;usingpii=pair<int,int>;constdoublePI=acos(-1);constintN=5e5+10......
  • 算法-在数组中获取制定值的索引值-php(二分法)
    算法-在数组中获取制定值的索引值-php(二分法)<?php/***代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可***@paramnumsint整型一维数组*@paramtargetint整型*@returnint整型*/functionsearch($nums,$target){//......
  • 力扣-数组-219 存在重复元素Ⅱ
    解析同上一篇《力扣-数组-217存在重复元素》存储在重复元素的思路,重点是放在结构体里,保存之前的下标即可。代码classSolution{public:structmyNode{intindex;intvalue;};staticboolcmp(myNodea,myNodeb){return......
  • 算法4:长度最小的子数组
    一、前言题目链接:力扣题目链接给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl,numsl+1,...,numsr-1,numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示例1:输入:tar......
  • 算法3:有序数组的平方
    一、前言题目链接:力扣题目链接给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16,1,0,9,100]排序后,数组变为[0,1,9,16,100]示......
  • 数组操作
    一、遍历数组使用标准的for循环可以完成一个数组的遍历:点击查看代码//遍历数组publicclassMain{publicstaticvoidmain(String[]args){int[]ns={1,4,9,16,25};for(inti=0;i<ns.length;i++){intn=ns[i];......
  • 数据结构与算法之二叉树: LeetCode 108. 将有序数组转换为二叉搜索树 (Ts版)
    将有序数组转换为二叉搜索树https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/description/描述给你一个整数数组nums,其中元素已经按升序排列请你将其转换为一棵平衡二叉搜索树示例1输入:nums=[-10,-3,0,5,9]输出:[0,-3,9,-10,nul......
  • 【练习】力扣 热题100 最大子数组和
    题目给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。示例1:输入:nums=[-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组[4,-1,2,1]的和最大,为6。示例2:输入:nums=[1]输出:......
  • 用递归算法实现,数组长度为5且元素的随机数在2-32间不重复的值
    在前端开发中,可以使用JavaScript来生成一个长度为5的数组,数组中的元素是2到32之间的不重复随机数。递归算法可以用来确保生成的随机数是唯一的,即数组中不会出现重复的值。以下是一个可能的实现:functiongenerateUniqueRandomNumbers(arr,min,max,length){if(arr.length>......