線段樹區間操作

2021-07-30 06:03:48 字數 2151 閱讀 5009

要求單點修改,區間求和,區間取模

由於乙個數只能被取模log次,所以區間取模就變成了單點修改,同時對區間維護乙個mx值,如果mx小於模數就不取模

#include

#define ll long long

using namespace std;

const int maxn=100000+10;

int setv[maxn*4],mx[maxn*4],n,m,a[maxn];

ll sum[maxn*4];

void pushup(int p)

void pushdown(int p,int l,int r,int mid)

}void build(int p,int l,int r)

int mid=(l+r)>>1;

build(p*2,l,mid);build(p*2+1,mid+1,r);

pushup(p);

}ll query(int p,int l,int r,int

x,int

y)void update(int p,int l,int r,int

x,int

y,int v)

int mid=(l+r)>>1;pushdown(p,l,r,mid);

update(p*2,l,mid,x,y,v);update(p*2+1,mid+1,r,x,y,v);

pushup(p);

}void update2(int p,int l,int r,int

x,int

y,int v)

int mid=(l+r)>>1;

pushdown(p,l,r,mid);

update2(p*2,l,mid,x,y,v);update2(p*2+1,mid+1,r,x,y,v);

pushup(p);

}int main()

if(op==2)

if(op==3)

} return

0;}

支援區間開根,區間加,區間求和

由於開根很容易使得一段數都相同,所以區間開根就變成了區間加

剪枝條件為mx==mn||mx-mn==1&&sqrt(mx)!=sqrt(mn)

感覺前半部分很好想,但後半部分就有點難了,不過某次多校只要mx==mn就可以現場ac

#include

#define ll long long

using namespace std;

const int maxn=100000+10;

const double eps=1e-12;

int n,m,a[maxn];

ll sum[maxn*4],add[maxn*4],mx[maxn*4],mn[maxn*4];

void pushup(int p)

void pushdown(int p,int l,int r,int mid)

}void build(int p,int l,int r)

int mid=(l+r)>>1;

build(p*2,l,mid);build(p*2+1,mid+1,r);

pushup(p);

}ll query(int p,int l,int r,int

x,int

y)void update(int p,int l,int r,int

x,int

y,int v)

int mid=(l+r)>>1;

pushdown(p,l,r,mid);

update(p*2,l,mid,x,y,v);update(p*2+1,mid+1,r,x,y,v);

pushup(p);

}void update2(int p,int l,int r,int

x,int

y) }

int mid=(l+r)>>1;

pushdown(p,l,r,mid);

update2(p*2,l,mid,x,y);update2(p*2+1,mid+1,r,x,y);

pushup(p);

}int main()

if(op==2)

if(op==3)

} return

0;}

線段樹區間操作總結

昨天覆習了幾個月前自己寫下的線段樹區間操作總結的演算法筆記,雖然注釋很多,但重新再看時發現注釋仍然不夠。於是這次重新複習了線段樹區間操作演算法,已乙個初學者的角度來加上許多注釋和筆記。我將線段樹的區間操作,包括區間運算,區間求值封裝到了乙個類裡。兩種操作又包含普通版和lazy標籤版,下面是 incl...

線段樹的區間操作 板

區間操作 struct node tr maxn 2 節點型別 void pushup int m void build int m,int l,int r 如果只有乙個節點 int mid l r 1 build m 1,l,mid build m 1 1,mid 1,r 建好左右半邊 pushu...

線段樹 (區間和 單點操作)

include include include include include include include include include include define fast ios sync with stdio false define ll long long pragma gcc o...