zoukankan      html  css  js  c++  java
  • 线段树的动态开点

    long long cnt=1;
    long long sum[maxn*150],lazy[maxn*150],Lnode[maxn*150],Rnode[maxn*150];
    void PushUp(long long rt){sum[rt]=sum[Lnode[rt]]+sum[Rnode[rt]];}
    void PushDown(long long rt,long long ln,long long rn){
        if(lazy[rt]){//1非工作人,2工作日
            lazy[Lnode[rt]]+=lazy[rt];sum[Lnode[rt]]+=lazy[rt]*ln;
            lazy[Rnode[rt]]+=lazy[rt];sum[Rnode[rt]]+=lazy[rt]*rn;
            lazy[rt]=0;
        }
    }
    void Update(long long L,long long R,long long C,long long l,long long r,long long rt){
        if(L<=l&&r<=R) {
            sum[rt] += C*(r-l+1);
            lazy[rt] += C;
            return;
        }
        long long m=(l+r)>>1;
        if(!Lnode[rt])Lnode[rt]=++cnt;
        if(!Rnode[rt])Rnode[rt]=++cnt;
        PushDown(rt,m-l+1,r-m);
        if(L <= m)Update(L,R,C,l,m,Lnode[rt]);
        if(R >  m)Update(L,R,C,m+1,r,Rnode[rt]);
        PushUp(rt);
    }
    long long Query(long long L,long long R,long long l,long long r,long long rt){
        if(L<=l&&r<=R){
            return sum[rt];
        }
        long long m=(l+r)>>1;
        long long ANS=0;
        PushDown(rt,m-l+1,r-m);
        if(L <= m)ANS+=Query(L,R,l,m,Lnode[rt]);
        if(R >  m )ANS+=Query(L,R,m+1,r,Rnode[rt]);
        return ANS;
    }
  • 相关阅读:
    正则表达式基础以及应用
    日常使用之css篇
    echarts的使用总结
    &#65279导致页面顶部空白一行
    vue.js单页面应用实例
    BFC的外边距折叠
    .net 跳出Frameset框架
    Cache缓存使用
    Kafka集群搭建及安全机制手册
    PHP学习笔记
  • 原文地址:https://www.cnblogs.com/yesuweiYYYY/p/13808642.html
Copyright © 2011-2022 走看看