• 线段树成断更新裸题hdu1698 Just a Hook


    成段更新(通常这对初学者来说是一道坎),需要用到延迟标记(或者说懒惰标记),简单来说就是每次更新的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新or询问到的时候

    题意:O(-1)
    思路:O(-1)
    线段树功能:update:成段替换 (由于只query一次总区间,所以可以直接输出1结点的信息)

    #include<stdio.h>
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define maxn 100000
    int col[maxn<<2],sum[maxn<<2];
    int Pushup(int rt)
    {
        sum[rt]=sum[rt<<1]+sum[rt<<1|1];
    }
    int build(int l,int r,int rt)
    {
        col[rt]=0;
        sum[rt]=1;
        if(l==r) return 0;
        int m=(l+r)>>1;
        build(lson);
        build(rson);
        Pushup(rt);
    }
    int Pushdown(int rt,int k)
    {
        if(col[rt])
            {
                col[rt<<1]=col[rt<<1|1]=col[rt];
                sum[rt<<1]=(k-(k>>1))*col[rt];
                sum[rt<<1|1]=(k>>1)*col[rt];
                col[rt]=0;
            }
    }
    int query(int L,int R,int Z,int l,int r,int rt)
    {
        if(L<=l&&r<=R)
            {
                col[rt]=Z;
                sum[rt]=(r-l+1)*Z;
                return 0;
            }
        Pushdown(rt,r-l+1);
        int m=(l+r)>>1;
        if(L<=m) query(L,R,Z,lson);
        if(R>m) query(L,R,Z,rson);
        Pushup(rt);
    }
    int main()
    {
        freopen("hdu1698.in","r",stdin);
        freopen("hdu1698.out","w",stdout);
        int ca,i,N,Q,X,Y,Z,j;
        scanf("%d",&ca);
        for(i=1;i<=ca;i++)
            {   
                scanf("%d%d",&N,&Q);
                build(1,N,1);
                for(j=1;j<=Q;j++)
                    {
                        scanf("%d%d%d",&X,&Y,&Z);
                        query(X,Y,Z,1,N,1);
                    }
                printf("Case %d: The total value of the hook is %d.\n",i,sum[1]);
            }
        return 0;
    }


  • 相关阅读:
    COF框架集成mongodb驱动
    在 RedHat Enterprise、CentOS 或 Fedora Linux 上安装 MongoDB
    利用RATF框架实现web状态的监控
    利用接口测试框架实现web状态的监控
    uwsgi配置
    NODE_ENV&&cross-env的使用
    局部安装的webpack怎么通过npm脚本执行
    react
    .gitignore无法忽略部分文件/文件夹
    MongoDB
  • 原文地址:https://www.cnblogs.com/zy691357966/p/5480498.html
Copyright © 2020-2023  润新知