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

P3374 【模板】树状数组 1

时间:2024-01-25 10:58:50浏览次数:20  
标签:node return 树状 int long num ans P3374 模板

part1

#include<bits/stdc++.h> 
#define int long long
using namespace std;
struct  node1{int l,r,value;};
node1 node[2000020];
int a[500010];
void mt(int p,int l,int r)
{
    int mid=(l+r)>>1;
    node[p].l=l;
    node[p].r=r;
    if(l==r)
    {
        node[p].value=a[l];
        return;
    }
    mt(p<<1,l,mid);
    mt(p<<1|1,mid+1,r);
    node[p].value=node[p<<1].value+node[p<<1|1].value;
}
int findNum(int p, int l, int r)
{
    if(node[p].l==l&&node[p].r==r)return node[p].value;
    int mid=(node[p].l+node[p].r)>>1;
    if(r<=mid)return findNum(p<<1,l,r);
    if(l>mid)return findNum(p<<1|1,l,r);
    return findNum(p<<1,l,mid)+findNum(p<<1|1,mid+1,r);
}
void at(int i, int x)
{
    int p=1;
    while(1)
    {
        node[p].value+=x;
        if(node[p].l==node[p].r) break;
        int mid=(node[p].l+node[p].r)>>1;
        p<<=1;
        if(i>mid)p|=1;
    }
    return;
}
int n,m,x,y,z;
signed main()
{
	cin>>n>>m;
	for(int i=1;i<=n;++i)cin >> a[i];
    mt(1,1,n);
    for(int i=1;i<=m;i++){
    	cin>>x>>y>>z;
    	if(x==1) at(y,z);
    	if(x==2) cout<<findNum(1,y,z)<<endl;
	}
	return 0;
}

part2

#include<bits/stdc++.h>
#define int long long
using namespace std;
int lowbit(int num){
	return num&-num;
}
int n,m,t,z,x,y,a[500010],d[500010];
int get(int num){
       int ans=0;
       while(num!=0)
       {
            ans+=d[num];
            num-=lowbit(num);
        }
        return ans;
}
 void add(int x,int k)
    {
        while(x<=n)
        {
            d[x]+=k;
            x+=lowbit(x);
        }
    }
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		add(i,a[i]);
	} 
	for(int i=1;i<=m;i++){
		cin>>z>>x>>y;
		if(z==1){
			 add(x,y);	
		}
		if(z==2){
			cout<<get(y)-get(x-1)<<endl;
		}
	}
	return 0;
}

标签:node,return,树状,int,long,num,ans,P3374,模板
From: https://www.cnblogs.com/wenzhihao2023/p/17986668

相关文章

  • 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)......
  • 【模板】多项式半家桶 version 2
    #include<bits/stdc++.h>usingnamespacestd;#ifdefLOCAL#definedebug(...)fprintf(stderr,##__VA_ARGS__)#else#defineendl"\n"#definedebug(...)void(0)#endiftypedeflonglongLL;template<unsignedumod>structmodint{......
  • emlog蓝叶模板伪原创插件
    一个模板如果使用的人多,搜索引擎会识别网站的相似度,会认为这是同一个站作弊行为,那就会降低你网站的权重,可能最终你的幸苦更新会成就别人,做了别人的嫁衣,所以有条件的最好是做个全新代码的模版,如果不想重新做新模板,那么emlog蓝叶模板伪原创插件可以实现你的要求,使用emlog蓝叶模板伪......
  • 算法模板 v1.3.2.20240124
    算法模板v1.1.1.20240115:之前的历史版本已经不可寻,创建了第一份算法模板。v1.2.1.20240116:删除“编译”-“手动开栈”与“编译”-“手动开O优化”;将“编译”-“CF模板”中的第20行代码cin>>T;注释;删除“读写”及其目录下的内容;删除“图论”-“欧拉图”-“混合图”;删除“图论”-......
  • 微信小程序个人中心模板
    wxml<view><viewclass="top"><viewclass="center"><viewclass="center_top"><viewclass="center_img"bindtap="toBaseInfo"><!--<imagesrc=&qu......
  • 设计模式之模板方法
    1.定义定义了一个算法的框架,并允许子类重写其中的某些步骤,而不改变算法的结构2.口语化表述模板方法其实在日常生活中已经很常见,所谓模板方法,就是事先约定好一些事情,后续做时再慢慢实现或者修改,比如组装电脑假设现在需要组装一台台式电脑,一开始计划使用3090显卡,后来根据实际......
  • 2024年可能会用到的几个地图可视化模板
    前言在数字化的过程中,数据可视化变得越来越重要。用户喜欢通过酷炫的视觉效果和直观的数据展示来理解数据。可视化地图组件是数据可视化的重要组成部分。这些地图组件提供多样化的效果,能够更好地展示数据的关系和地理分布,直观地将数据与各个区域进行关联。它们不仅有效而美观地呈......
  • 昆虫科学院模板库
    前言:这是我们昆虫科学院自主开发的模板库。模板库完整代码(Private,私人链接),如果需要私信我(@zyc212303)。模板库编译选项:-std=gnu++17-O2使用该模板时,请在程序开头加上如下语句:#include<bits/stdc++.h>usingnamespacestd;现已有:快速IO、并查集、ST表、树状数组、扫......
  • 【C++进阶】function和bind及可变模板参数
     文章目录1.function和bind1.1function使用方法1.2bind2.可变模板参数2.1可变模板参数函数2.2可变模板参数的展开 1.function和bindC++中的function和bind是为了更方便地进行函数对象的封装和调用而设计的。function是一个通用的函数对象容器......
  • 模板模式
    定义:定义了一个算法的骨架,并允许子类为一个或多个步骤提供实现补充:模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤类型:行为型适用场景:一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现各子类中公共的行为被提取出来并集中到一个公共父类......