首页 > 其他分享 >郝玩的数据结构2——树状数组(待upd)

郝玩的数据结构2——树状数组(待upd)

时间:2024-11-14 20:45:37浏览次数:1  
标签:树状 int upd namespace 查改 郝玩 void change

首先,拉张图

树状数组,相对于线段树来说,空间复杂度更小,但是可以处理的信息具有局限性
常用于处理区间(矩阵)查改(差分转化为单点查改),单点查改

板子题1

Ac code:

点击查看代码
#include<bits/stdc++.h>
#define lowbit x&-x
using namespace std;
int n,m,s[500005];
void change(int x,int k){
	while(x<=n) s[x]+=k,x+=lowbit;
}
int query(int x){
	int t=0;
	while(x) t+=s[x],x-=lowbit;
	return t;
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m;
	int op,x,y;
	for(int i=1;i<=n;i++){
		cin>>y;
		change(i,y);
	}
	for(int i=1;i<=m;i++){
		cin>>op>>x>>y;
		if(op==1) change(x,y);
		else cout<<query(y)-query(x-1)<<"\n";
	}
	return 0;
}

以及改进(退/奇怪)了马蜂

点击查看代码
//树状数组
#include<bits/stdc++.h>
using namespace std;
#define N 500001
int n,m;
int s[N];
namespace tr{
    inline int lowbit(int x){
        return x&-x;
    }
    void change(int nb,int i){
        while(i<=n){
            s[i]+=nb;
            i+=lowbit(i);
        }
    }
    int query(int x){
        int sum=0;
        while(x){
            sum+=s[x],x-=lowbit(x);
        }
        return sum;
    }
}
namespace rw{
    inline int read(){
        int nb=0,f=1;
        char c=getchar();
        while(c>'9' || c<'0'){
            if(c=='-') f=-f;
            c=getchar();
        }
        while(c>='0' && c<='9'){
            nb=(nb<<3)+(nb<<1)+(c^48);
            c=getchar();
        }
        return nb*f;
    }
    void write(int x){
        if(x<0) putchar('-'),x=~x+1;
        if(x>9) write(x/10);
        putchar(x%10^48);
        return ;
    }
    inline void scan(){
        n=read(),m=read();
        for(int i=1;i<=n;i++){
            int wow=read();
            tr::change(wow,i);
        }
        for(int i=1;i<=m;i++){
            int wow=read();
            if(wow==1){
                int x=read(),y=read();
                tr::change(y,x);
            }
            else{
                int x=read(),y=read();
                cout<<tr::query(y)-tr::query(x-1)<<"\n";
            }
        }
    }
}
int main(){
    rw::scan();
    return 0;
}

就酱!

标签:树状,int,upd,namespace,查改,郝玩,void,change
From: https://www.cnblogs.com/cathyzro/p/18546773

相关文章

  • 洛谷题单指南-二叉堆与树状数组-P1878 舞蹈课
    原题链接:https://www.luogu.com.cn/problem/P1878题意解读:n个男女排列一行,每人舞蹈技术是ai,每次找到相邻男女舞蹈技术差值绝对值最小的一对出列,输出每对出列的人员编号。解题思路:设初始有8人编号为:12345678将12,23,34,45,56,67,78中是男女的配对编号以及a......
  • 郝玩的数据结构1——单调栈,单调队列
    栈和队列是很郝咏的Stl,那么,我们手搓——用数组模拟故事背景:辣鸡老o在学单调栈&单调队列——我栈top为栈顶,易得出出栈即top--,入栈++top=(ovo)......——完全不会讲,那么上马:点击查看代码#include<bits/stdc++.h>usingnamespacestd;constintN=114514;intstk[N],top=0;......
  • 洛谷题单指南-二叉堆与树状数组-P2085 最小函数值
    原题链接:https://www.luogu.com.cn/problem/P2085题意解读:有n个函数,函数中x取值>=1,计算所有函数能得到的值中最小的m个。解题思路:函数中x取值是>=1的整数,因此每个函数的值是f(1),f(2),f(3)....,是一个递增序列,题目本质上是要从n个递增序列中找到前m个最小的数。首先,对所有函数......
  • 树状数组learning Day1识海社区打卡1st
    鉴于上次省赛的惨烈失败教训,狠狠加训,距离下次沈阳站还有两星期,再次感谢东北大学赐予的外卡机会,你知道的,东北大学一直是我的第二户籍所在地。今天到下星期周末为止估计都会持续更新树状数组和线段树相关的笔记。我的刷题顺序大概会按照[灵神提单](LC-Rating&Training)->codefor......
  • VMware vSphere 6.7 Update 3w 下载
    VMwarevSphere6.7Update3w下载ESXi6.7U3&vCenterServer6.7U3,Dell,HPE,LENOVO,InspurCustomImage请访问原文链接:https://sysin.org/blog/vmware-vsphere-6/查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgVMwarevCenterServer6.7Update3w,2......
  • 洛谷题单指南-二叉堆与树状数组-P1168 中位数
    原题链接:https://www.luogu.com.cn/problem/P1168题意解读:中位数就是位于中间的数,前1个数的中位数是第1个,前3个数的中位数是第2个,前5个数的中位数的第3个...以此类推。所以,此题本质上就是动态维护一组数,每1/3/5...等奇数个取第k小的数,取一次后k++。解题思路:要动态维护数据,且每......
  • 洛谷题单指南-二叉堆与树状数组-P2827 [NOIP2016 提高组] 蚯蚓
    原题链接:https://www.luogu.com.cn/problem/P2827题意解读:初始n个数,每次取最大值x,根据u/v分成两部分:x*u/v,x-x*u/v,然后其余数都增加q,整个过程重复m次。输出有两类数据:第t,2t,3t...次取出的最大值;最后剩余的数第t,2t,3t...个,从大到小输出。解题思路:直观上,通过模拟法可以实......
  • 线段树与树状数组
    线段树与树状数组都是十分经典的数据结构,其实能用树状数组解决的问题也都能用线段树解决,但线段树相比于树状数组常数较大。单点修改区间查询线段树做法,树状数组做法,其实单纯实现这个还是用树状数组较好(毕竟常数小还好写)区间修改区间查询只有区间加树状数组做法,线段树做法既......
  • 【PDF提取神器】最新推出的PymuPDF4llm库 可提取pdf中的文字/表格/图像/单词
    目录前言安装Pymupdf4llm多模态具体应用API文档前言PymuPDF4llm是最新推出的pdf提取工具,针对LLM进行了专门优化,它支持markdown提取和LlamaIndex文档输出,可以准确提取pdf中的结构化数据,包括文字/表格/图像/单词,其中文字以markdown的形式提取,图像则以路径的形式插入到文......
  • 二维树状数组
    前置知识树状数组(不会就学一下再来)简介因为树状数组可以非常简洁解决序列上的一些问题,所以考虑能否用树状数组解决矩阵(二维序列)的问题。比较暴力的想法是对于每一横行建一个树状数组,再对每一列建一个树状数组统计答案。但这样显然要\(n+m\)个树状数组,但是我们发现这些树状数......