zoukankan      html  css  js  c++  java
  • hdu 1698 Just a Hook

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1698

    这道题是成段更新,使用延迟标记,对于当前的left<=l&&right>=r直接返回,等到下次更新搜索到时候才向下更新,push_down;

    #include<cstdio>
    #include<cstdlib>
    #include<cmath>
    #include<cstring>
    #define MAXN 200010
    int color[MAXN<<2];
    int tree[MAXN<<2];
    void build_tree(int l,int r,int id);
    void up_date_tree(int left,int right,int l,int r,int id,int value);
    void push_down(int l,int r,int id);
    void push_up_tree(int id);
    int main()
    {
        int tcase,i,j,k,n,value,left,right,num;
        while(scanf("%d",&tcase)==1)
        {
            for(j=1;j<=tcase;j++)
            {
                scanf("%d",&n);
                build_tree(1,n,1);
                scanf("%d",&num);
                for(i=0;i<num;i++)
                {
    
                  scanf("%d%d%d",&left,&right,&value);
                  up_date_tree(left,right,1,n,1,value);
                }
                printf("Case %d: The total value of the hook is %d.\n",j,tree[1]);
            }
        }
    
    }
    void build_tree(int l,int r,int id)
    {
        color[id]=0;
        if(l==r)
        {
            tree[id]=1;
            return ;
        }
        tree[id]=r-l+1;
        int mid=l+r>>1;
        build_tree(l,mid,id<<1);
        build_tree(mid+1,r,id<<1|1);
    
    }
    void up_date_tree(int left,int right,int l,int r,int id,int value)
    {
        if(left<=l&&right>=r)
        {
            tree[id]=(r-l+1)*value;
            color[id]=value;
            return ;
        }
        push_down(l,r,id);
        int mid=l+r>>1;
       if(left<=mid) up_date_tree(left,right,l,mid,id<<1,value);
       if(right>mid) up_date_tree(left,right,mid+1,r,id<<1|1,value);
       push_up_tree(id);
    }
    void push_down(int l,int r,int id)
    {
        if(color[id])
        {
            color[id<<1]=color[id];
            color[id<<1|1]=color[id];
            int mid=l+r>>1;
            tree[id<<1]=(mid-l+1)*color[id];
            tree[id<<1|1]=(r-mid)*color[id];
    
    
    
        }
        color[id]=0;
    }
    void push_up_tree(int id)
    {
        tree[id]=tree[id<<1]+tree[id<<1|1];
    }
  • 相关阅读:
    javaTemplates-学习笔记三
    索引
    WTForms
    session权限限制
    vue-cli脚手架项目中组件的使用
    vue补充
    表单输入绑定
    vue指令系统介绍
    vue-cli脚手架安装和webpack-simple模板项目生成
    rest-framework之视图
  • 原文地址:https://www.cnblogs.com/woaiyy/p/2538364.html
Copyright © 2011-2022 走看看