zoukankan      html  css  js  c++  java
  • HDU

      模板题,区间更新,把l到r区间的每个数都换成z

      

    #include<stdio.h>
    using namespace std;
    const int maxn=100005;
    struct node
    {
        int l,r;
        int lazy,tag;
        int sum;
    }segtree[maxn*4];
    void pushdown(int i)
    {
        if(segtree[i].lazy!=0)
        {
    
            segtree[(i<<1)].lazy=1;
            segtree[(i<<1)].tag=segtree[i].tag;
            segtree[(i<<1)].sum=(segtree[(i<<1)].r-segtree[(i<<1)].l+1)*segtree[i].tag;
            segtree[(i<<1)|1].lazy=1;
            segtree[(i<<1)|1].tag=segtree[i].tag;
            segtree[(i<<1)|1].sum=(segtree[(i<<1)|1].r-segtree[(i<<1)|1].l+1)*segtree[i].tag;
            segtree[i].lazy=0;
            segtree[i].tag=0;
        }
    }
    void pushup(int i)
    {
        segtree[i].sum=segtree[(i<<1)].sum+segtree[(i<<1)|1].sum;
    }
    
    void build(int i,int l,int r)
    {
        segtree[i].l=l;
        segtree[i].r=r;
        segtree[i].lazy=0;
        segtree[i].tag=0;
        if(l==r)
        {
            segtree[i].sum=1;
            return ;
        }
        int mid=(l+r)>>1;
        build((i<<1),l,mid);
        build((i<<1)|1,mid+1,r);
        pushup(i);
    }
    
    void update(int i,int l,int r,int v)
    {
        if((segtree[i].l==l)&&(segtree[i].r==r))//³É¶Î¸üÐÂ
        {
            segtree[i].lazy=1;
            segtree[i].tag=v;
            segtree[i].sum=(r-l+1)*v;
            return ;
        }
        int mid=(segtree[i].l+segtree[i].r)>>1;
        pushdown(i);
        if(r<=mid)
            update((i<<1),l,r,v);
        else
            if(l>mid)
                update((i<<1)|1,l,r,v);
            else
            {
                update((i<<1),l,mid,v);
                update((i<<1)|1,mid+1,r,v);
            }
        pushup(i);
    }
    
    
    int main()
    {
        int x,y,z;
        int n,m,t;
        scanf("%d",&t);
        int mycase=0;
        while(t--)
        {
            mycase++;
            scanf("%d%d",&n,&m);
            build(1,1,n);
            while(m--)
            {
                scanf("%d%d%d",&x,&y,&z);
                update(1,x,y,z);
            }
            printf("Case %d: The total value of the hook is %d.
    ",mycase,segtree[1].sum);
        }
    
        return 0;
    }
    

      

  • 相关阅读:
    cc.Component
    cc.Node—坐标系统
    cc.Node—事件响应
    cc.Node—Action
    cc.Node—场景树
    console.log格式化及console对象
    网站开发学习Python实现-Django项目部署-介绍(6.2.1)
    个人博客搭建Python实现-尝试-遇到的问题(10.1.1)
    工具-Redis-django存储session(99.6.4)
    工具-Redis-与Python一起使用(99.6.3)
  • 原文地址:https://www.cnblogs.com/eason9906/p/11755079.html
Copyright © 2011-2022 走看看