zoukankan      html  css  js  c++  java
  • [线段树] (d) hdu1698 (区间修改)

    (d) hdu1698 Just a Hook

    如在阅读本文时遇到不懂的部分,请在评论区询问,或跳转 线段树总介绍

    注意一开始整个区间都是1

    此题过水不予讲解

    代码

    /*hdu1698*/
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    const int N=2e7+3;
    int T,n,m;
    int tag[N<<2],v[N<<2];
    #define mid (l+r>>1)
    #define ls (rt<<1)
    #define rs (ls|1)
    #define pushup(rt) v[rt]=v[ls]+v[rs]
    void build(int rt,int l,int r){
        tag[rt]=0;
        if(l==r){v[rt]=1;return;}
        build(ls,l,mid);build(rs,mid+1,r);
        pushup(rt);
    }
    void pushdown(int rt,int l,int r){
        tag[ls]=tag[rt],tag[rs]=tag[rt];
        v[ls]=(mid-l+1)*tag[rt];
        v[rs]=(r-mid)*tag[rt];
        tag[rt]=0;
    }
    void update(int rt,int l,int r,int x,int y,int z){
        if(x<=l&&y>=r){tag[rt]=z;v[rt]=(r-l+1)*z;return;}
        if(tag[rt])pushdown(rt,l,r);
        if(x<=mid)update(ls,l,mid,x,y,z);
        if(y>mid)update(rs,mid+1,r,x,y,z);
        pushup(rt);
    }
    int Case=0;
    int main(){
        scanf("%d",&T);
        while(T--){
            scanf("%d%d",&n,&m);
            //build(1,1,n);
            update(1,1,n,1,n,1);
            int x,y,z;
            while(m--){
                scanf("%d%d%d",&x,&y,&z);
                update(1,1,n,x,y,z);
            }
            printf("Case %d: The total value of the hook is %d.
    ",++Case,v[1]);   
        }
        return 0;
    }

     End

  • 相关阅读:
    RESTful规范
    Vuex以及axios
    npm webpack vue-cli
    Vue生命周期
    Vue-Router
    Vue组件
    Vue基础以及指令
    1.JavaCC安装与测试
    10.InfluxDB-InfluxQL基础语法教程--OFFSET 和SOFFSET子句
    9.InfluxDB-InfluxQL基础语法教程--LIMIT and SLIMIT 子句
  • 原文地址:https://www.cnblogs.com/lsy263/p/11227976.html
Copyright © 2011-2022 走看看