zoukankan      html  css  js  c++  java
  • 线段树 模板

    http://acm.hdu.edu.cn/showproblem.php?pid=1698 

    模板!

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    typedef long long int ll;
    using namespace std; 
    ll sum[400004];
    ll lazy[400004];
    // 中间值统一靠左 
    void pushup(int cr){
        sum[cr]=sum[cr*2]+sum[2*cr+1];
    }
    void pushdown(int cr,int ln,int rn){  
        if(lazy[cr]){
            lazy[cr<<1]=lazy[cr];
            lazy[cr<<1|1]=lazy[cr];        
            sum[cr<<1]=lazy[cr]*ln;
            sum[cr<<1|1]=lazy[cr]*rn;
        }
        lazy[cr]=0;
    }
    void update(int l,int r,ll val,int L,int R,int cr){    
        int m=(L+R)/2;     
        if(L==l && r==R){
            sum[cr]=( (r-l+1)*val );
            lazy[cr]=val;
            return ;
        }
        pushdown(cr,m-L+1,R-m);
        if(l<=m) update(l,min(r,m),val,L,m,cr*2);
        if(r>=m+1) update(max(m+1,l),r,val,m+1,R,cr*2+1);
        if(R!=L)
            pushup(cr);
    }
    void build(int l,int r,int cr){   
        if(l==r){
            sum[cr]=1;
            return;
        }
        int mid= (l+r)/2;
        build(l,mid,2*cr);
        build(mid+1,r,2*cr+1);
        pushup(cr);
    }
    ll query(int l,int r,int L,int R,int cr){
    
        if(l==L&&r==R){
            return sum[cr];
        }
        else{
            ll ans=0;
            int m=(L+R)/2;
            pushdown(cr,m-L+1,R-m);
            if(l<=m) {    
                ans+=query(l,min(r,m),L,m,cr*2);    
            }
            if(r>=m+1){
                ans+=query( max(l,m+1),r,m+1,R,cr*2+1 );
            } 
            return ans;
        }
    }
    int main(){
        int t;
        scanf("%d",&t);
        for(int j=1;j<=t;j++){
            int n,op;
            scanf("%d%d",&n,&op);
            memset(sum,0,sizeof(sum));
            memset(lazy,0,sizeof(lazy));
            build(1,n,1); 
            for(int i=0;i<op;i++){
                int l,r,val;
                scanf("%d%d%d",&l,&r,&val);
                update(l,r,val,1,n,1);            
            }
            printf("Case %d: The total value of the hook is %lld.
    ",j,query(1,n,1,n,1) );
        }
    }
     
    

      

  • 相关阅读:
    phpcms v9 更改首页
    不是技术牛人,如何拿到国内IT巨头的Offer
    超实用的PHP代码片段!
    Android 中的 Service 全面总结
    近期十大优秀jQuery插件推荐
    DIOCP之编写第一个应用程序(二)
    DIOCP之编写第一个应用程序(一)
    DIOCP之DEMO学习顺序及达到要求
    DIOCP之EchoServer分析
    DIOCP之数据接收事件
  • 原文地址:https://www.cnblogs.com/z-bear/p/9392946.html
Copyright © 2011-2022 走看看