线段树模板

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;

以上是关于线段树模板的主要内容,如果未能解决你的问题,请参考以下文章

线段树 (区间覆盖模板)

[模板] 线段树合并

权值线段树套序列线段树

洛谷P3372线段树模板1——线段树

[模板]线段树2-线段树

P6012 模板线段树分裂