标签:find 数据结构 结构 lin pushd 数论 query gis while
int fa[MAX];
int find(int x){
return x==fa[x]?x:fa[x]=find(fa[x]);
}
inline void merge(int x,int y){
register int a=find(x),b=find(y);
if(a!=b)fa[a]=b;
}
int main(){
for(register int i=1;i<=n;++i)fa[i]=i;
return 0;
}
int Arr[MAX];
inline void Add(int x,int v){
while(x<=n){
Arr[x]+=v;
x+=(x&-x);
}
}
inline int Query(int x){
register int res=0;
while(x){
res+=Arr[x];
x+=(x&-x);
}
return res;
}
int tree[MAX<<2],tag[MAX<<2];
inline void pushup(int x){
tree[x]=tree[x<<1]+tree[x<<1|1];
}
inline void push_down(int x,int l,int r,int v){
tag[x]+=v;tree[x]+=(r-l+1)*v;
}
inline void pushdown(int x,int l,int r){
register int mid=l+r>>1;
push_down(x<<1,l,mid,tag[x]);
push_down(x<<1|1,mid+1,r,tag[x]);
tag[x]=0;
}
int query(int x,int l,int r,int s,int t){
if(s<=l&&r<=t)return tree[x];
register int res=0,mid=l+r>>1;
pushdown(x,l,r);
if(s<=mid)res+=query(x<<1,l,mid,s,t);
if(mid<t)res+=query(x<<1|1,mid+1,r,s,t);
return res;
}
void modify(int x,int l,int r,int s,int t,int v){
if(s<=l&&r<=t){
tag[x]+=v;
tree[x]+=(r-l+1)*v;
return ;
}
pushdown(x,l,r);
register int mid=l+r>>1;
if(s<=mid)modify(x<<1,l,mid,s,t,v);
if(mid<t)modify(x<<1|1,mid+1,r,s,t,v);
pushup(x);
}
int a[MAX];
void build(int x,int l,int r){
if(l==r){
tree[x]=a[l];
return ;
}
register int mid=l+r>>1;
build(x<<1,l,mid);
build(x<<1|1,mid+1,r);
pushup(x);
}
标签:find 数据结构 结构 lin pushd 数论 query gis while
原文地址:https://www.cnblogs.com/Lates/p/12293103.html