zoukankan      html  css  js  c++  java
  • HDU1698 Just a Hook(成段替换+懒惰标记)

    题目大意

    给定一个长度为n的序列A,每个元素值初始全部为1,接下来有m个操作,每次给定操作区间[X,Y]和一个值v,表示把AX,AX+1,…AY的值全部修改为v,完成m次在操作之后要求你求出序列的总和

    题解

    区间修改的模板题。。。需要用到懒惰标记(搞了好久才弄懂o(╯□╰)o)。。。

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define MAXN 100005
    #define lson l, m , s << 1
    #define rson m + 1 , r , s << 1 | 1
    using namespace std;
    int sumv[MAXN<<2],setv[MAXN<<2];
    void PushUp(int s)
    {
        sumv[s]=sumv[s<<1]+sumv[s<<1|1];
    }
    void PushDown(int s,int m)
    {
        if(setv[s])
        {
            setv[s<<1]=setv[s<<1|1]=setv[s];
            sumv[s<<1]=(m-(m>>1))*setv[s];
            sumv[s<<1|1]=(m>>1)*setv[s];
            setv[s]=0;
        }
    }
    void build(int l,int r,int s)
    {
        sumv[s]=1;
        setv[s]=0;
        if(l==r) return;
        int m=(l+r)>>1;
        build(lson);
        build(rson);
        PushUp(s);
    }
    void update(int ql,int qr,int d,int l,int r,int s)
    {
        if(ql<=l&&r<=qr)
        {
            setv[s]=d;
            sumv[s]=d*(r-l+1);
            return;
        }
        PushDown(s,r-l+1);
        int m=(l+r)>>1;
        if(ql<=m) update(ql,qr,d,lson);
        if(qr>m) update(ql,qr,d,rson);
        PushUp(s);
    }
    int main(void)
    {
        int n,m,T,x,y,p=0,z;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&n,&m);
            build(1,n,1);
            while(m--)
            {
                scanf("%d%d%d",&x,&y,&z);
                update(x,y,z,1,n,1);
            }
            printf("Case %d: The total value of the hook is %d.\n",++p,sumv[1]);
        }
        return 0;
    }
  • 相关阅读:
    vscode识别预览markdown文件
    工具:静态资源服务器server
    vscode配置easy sass 生成压缩和未压缩的css文件
    cocos Create简单记录
    小程序AR云识别
    小程序被冻结 解冻方法
    vscode设置px转换为rem
    js 打印文本
    .net 启动进程并执行某方法
    c# 创建文件夹、压缩成zip格式并下载
  • 原文地址:https://www.cnblogs.com/zjbztianya/p/3076630.html
Copyright © 2011-2022 走看看