OI模板合集(数据结构图论数论)
Posted lates
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OI模板合集(数据结构图论数论)相关的知识,希望对你有一定的参考价值。
本模板合集将持续更新
数据结构
- 并查集
编写次数:29
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;
}
- 树状数组 BIT
编写次数:24
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;
}
- 线段树 seg
编写次数:25
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);
}
以上是关于OI模板合集(数据结构图论数论)的主要内容,如果未能解决你的问题,请参考以下文章
《算法竞赛中的初等数论》正文 0x50筛法(ACM / OI / MO)(十五万字符数论书)
《算法竞赛中的初等数论》正文 0x60 原根(ACM / OI / MO)(二十万字符数论书)
《算法竞赛中的初等数论》正文 0x50筛法(ACM / OI / MO)(十五万字符数论书)