首页 > 其他分享 >树状数组【模板】

树状数组【模板】

时间:2025-01-13 09:25:38浏览次数:1  
标签:const 树状 int ll add dandian 数组 using 模板

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

#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 a[N];
int n,m;
void add_dandian(int x,int k){
	for(int i=x;i<=n;i+=lowbit(i)){
		a[i]+=k;
	}
}
ll query(int l,int r){//查询[l,r]的和
	ll ans=0;
	for(int i=r;i;i-=lowbit(i)){
		ans+=a[i];
	}
	for(int i=l-1;i;i-=lowbit(i)){
		ans-=a[i];
	}
	return ans;
}
void solve() {
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		int x;cin>>x;
		add_dandian(i,x);
	}
		
	while(m--){
		int t,x,y;cin>>t>>x>>y;
		if(t==1){
			add_dandian(x,y);
//			for(int i=1;i<=n;i++)
//				cout<<a[i]<<" ";
//			cout<<endl;
		}
		else{
			cout<<query(x,y)<<endl;
		}
	}
}

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

标签:const,树状,int,ll,add,dandian,数组,using,模板
From: https://www.cnblogs.com/laileou/p/18667833

相关文章

  • 修改fduthesis模板为book模板
    参考曾详东模板:曾详东fduthesis去掉论文格式的封面:style/auto-make-cover=false,(原来false为true!)cls文件:%Loadthebaseclasswithopenanyandonesideoptions\LoadClass[openany,oneside]{ctexbook}(前后页面对齐,章节之间不留空白页)添加如:注释,......
  • 算法-在数组中获取制定值的索引值-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];......
  • VS Code中创建Markdown模板
    在VSCode中Ctrl+N新建文件时,键入简洁的前缀,自动生成Markdown文件模板。配置VSCode用户设置Ctrl+Shift+P搜索OpenUserSettings.json在json文件中添加以下代码:"[markdown]":{"editor.quickSuggestions":true}创建Markdown模板Ctrl+Shift+P搜索snippets......
  • 数据结构与算法之二叉树: 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]输出:......