#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N];
struct tree{
#define M N<<2
int l[M],r[M],sum[M],Max[M];
void pushup(int p){
sum[p]=sum[p<<1]+sum[p<<1|1];
Max[p]=max(Max[p<<1],Max[p<<1|1]);
}
void build(int p,int L,int R){
l[p]=L,r[p]=R;
if(L==R){
sum[p]=Max[p]=a[L];
return;
}
int mid=(L+R)>>1;
build(p<<1,L,mid);
build(p<<1|1,mid+1,R);
pushup(p);
}
void Mod(int p,int L,int R,int mod){
if(Max[p]<mod)return;
if(l[p]==r[p]){
sum[p]%=mod,Max[p]%=mod;
return;
}
int mid=(l[p]+r[p])>>1;
if(L<=mid)Mod(p<<1,L,R,mod);
if(R>mid)Mod(p<<1|1,L,R,mod);
pushup(p);
}
void update(int p,int pos,int k){
if(l[p]==r[p]){
sum[p]=Max[p]=k;
return;
}
int mid=(l[p]+r[p])>>1;
if(pos<=mid)update(p<<1,pos,k);
if(pos>mid)update(p<<1|1,pos,k);
pushup(p);
}
long long query(int p,int L,int R){
if(L<=l[p]&&r[p]<=R)return sum[p];
int mid=(l[p]+r[p])>>1;long long ans=0;
if(L<=mid)ans+=query(p<<1,L,R);
if(mid<R)ans+=query(p<<1|1,L,R);
return ans;
}
}tr;
int main(){
cin>>a[1]>>a[2];
tr.build(1,1,2);
cout<<tr.query(1,1,2);
return 0;
}
线段树A+B
最新推荐文章于 2024-08-30 19:03:32 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)