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;
    }
  • 相关阅读:
    SpringBoot和SpringCould的关系
    MyBatis全局配置文件头
    MyBatis的SQL映射文件头
    MyBatis 驼峰式配置 yml配置
    频率组件
    序列化和反序列化
    生成器面试题
    序列化组件
    进程间通信IPC机制
    信号量、event事件和线程queue
  • 原文地址:https://www.cnblogs.com/yesuweiYYYY/p/13808642.html
Copyright © 2011-2022 走看看