zoukankan      html  css  js  c++  java
  • 【bzoj4636】 蒟蒻的数列 [线段树 动态开点]

    bzoj4636 蒟蒻的数列

    bzoj4636

    DCrusher有一个数列,初始值均为0,他进行N次操作,每次将数列[a,b)这个区间中所有比k小的数改为k,他想知道N次操作后数列中所有元素的和。

    第一行一个整数N,然后有N行,每行三个正整数a、b、k。
    N<=40000 , a、b、k<=10^9

    一道模板?

    ==动态开点 然后维护标记 所有操作完之后这段区间内所有数肯定都等于最大的那一次k 就是相当于打个标记

    upd19.9.5 ==动态开点数组开小了....
    一个自测地址

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define Max(x,y) ((x)>(y)?(x):(y))
    #define lson (o<<1)
    #define rson (o<<1|1)
    const int N=40000+10,M=1e9,inf=0x3f3f3f3f;
    int n,m,rt,tot;
    ll ans=0;
    template <class t>void rd(t &x){
        x=0;int w=0;char ch=0;
        while(!isdigit(ch)) w|=ch=='-',ch=getchar();
        while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
        x=w?-x:x;
    }
    
    struct node{int ls,rs,dat;}t[N*80];
    
    void upd(int &o,int l,int r,int x,int y,int k){
        if(l>y||r<x) return;
        if(!o) o=++tot;
        if(x<=l&&r<=y){t[o].dat=Max(t[o].dat,k);return;}
        int mid=l+r>>1;
        upd(t[o].ls,l,mid,x,y,k),upd(t[o].rs,mid+1,r,x,y,k);
    }
    void query(int o,int l,int r){
        if(!t[o].ls&&!t[o].rs){ans+=(ll)(r-l+1)*t[o].dat;return;}
        if(t[o].ls) t[t[o].ls].dat=Max(t[t[o].ls].dat,t[o].dat);
        if(t[o].rs) t[t[o].rs].dat=Max(t[t[o].rs].dat,t[o].dat);
        int mid=l+r>>1;
        if(t[o].ls) query(t[o].ls,l,mid);
        if(t[o].rs) query(t[o].rs,mid+1,r);
        if(!t[o].ls) ans+=(ll)(mid-l+1)*t[o].dat;
        if(!t[o].rs) ans+=(ll)(r-mid)*t[o].dat;
    }
    
    int main(){
      //  freopen("in.txt","r",stdin);
        //freopen("and.out","w",stdout);
        rd(n);
        for(int i=1,x,y,k;i<=n;++i){
            rd(x),rd(y),rd(k);
            if(x<=--y) upd(rt,1,M,x,y,k);
        }
        query(rt,1,M);
        printf("%lld",ans);
        return 0;
    }
    
  • 相关阅读:
    SQL------Hint
    JVM——垃圾回收
    JVM——内存结构
    SpringMVC——拦截器,过滤器实现登录拦截
    SpringMVC——参数传递
    SpringMVC——数据乱码问题
    SpringMVC——MVC执行流程底层剖析
    Spring——5种增强方式
    Spring——bean的五种作用域和生命周期
    Spring——多种方式实现依赖注入
  • 原文地址:https://www.cnblogs.com/lxyyyy/p/11461449.html
Copyright © 2011-2022 走看看