线段树模板
Posted ucprer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线段树模板相关的知识,希望对你有一定的参考价值。
ZKW线段树
数组定义
const ll M=1<<19;//从1开始,不能修改0和M
ll T[M+M];
单点修改区间查询
void modify(int n,int v)
for(T[n+=M]=v,n>>=1;n;n>>=1)
T[n]=T[n+n]+T[n+n+1];
ll query(ll l,ll r)
ll ans=0;
for(l+=M-1,r+=M+1;l^r^1;l>>=1,r>>=1)
if(~l&1) ans+=T[l^1];
if(r&1) ans+=T[r^1];
return ans;
单点修改区间最值
void modify(ll n,ll v)
for(T[n+=M]=v,n>>=1;n;n>>=1)
T[n]=max(T[n+n],T[n+n+1]);
ll query(ll l,ll r)
ll rmax=-INF,lmax=-INF;
for(l+=M-1,r+=M+1;l^r^1;l>>=1,r>>=1)
if(~l&1) lmax=max(lmax,T[l^1]);
if(r&1) rmax=max(rmax,T[r^1]);
return max(lmax,rmax);
区间修改单点查询
void add(int l,int r,int w)
for(l+=m-1,r+=m+1;l^r^1;l>>=1,r>>=1)
if(~l&1) T[l^1]+=w;
if(r&1) T[r^1]+=w;
int query(int x)
int ans=0;
for(x+=m;x;x>>=1)
ans+=T[x];
return ans;
以上是关于线段树模板的主要内容,如果未能解决你的问题,请参考以下文章