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

    题意:给你一个数为n的区间。区间的起始价值为1。然后要进行m次操作。操作即为改变给定区间的值(范围为1-3),要你计算终于的权值

    思路:就是线段树的区间跟新了

    AC代码:

    #include <iostream>
    #include<cstdio>
    using namespace std;
    
    struct node
    {
        int value;
        int a,b;
    }tree[300010];
    
    void maketree(int i,int a,int b)
    {
        tree[i].a=a;
        tree[i].b=b;
        tree[i].value=1;
        if(a==b)
        {
            return ;
        }
        int mid=(a+b)/2;
        maketree(2*i,a,mid);
        maketree(2*i+1,mid+1,b);
    }
    
    void update(int i,int a,int b,int v)
    {
        if(tree[i].value==v) //假设该区域内值一样则不用改动
            return ;
        if(tree[i].a==a && tree[i].b==b )//假设改动区域一样,则直接把该区域的值改为指定值
        {
            tree[i].value=v;
            return ;
        }
        if(tree[i].value !=-1) //假设是纯色的,而改动区域不一致。则先将其子区域置为父值。对子区域进行操作
        {
            tree[2*i].value=tree[2*i+1].value=tree[i].value;
            tree[i].value =-1; //标记为杂色
        }
        int mid=(tree[i].a+tree[i].b)/2; //以下一系列行为都是在父区间为杂色时对子区间进行的操作
        if(a>mid)            //更新区间为右区间
            update(2*i+1,a,b,v);
        else if(b<=mid)      //更新区间为左区间
            update(2*i,a,b,v);
        else                 //否则左右区间皆更新
        {
            update(2*i,a,mid,v);
            update(2*i+1,mid+1,b,v);
        }
    
    }
    
    int search(int i) //计算总值
    {
        if(tree[i].value!=-1)
            return (tree[i].b-tree[i].a+1)*tree[i].value;
        else
            return search(i*2)+search(i*2+1);
    }
    
    int main()
    {
        int a,b,t,q,v,i,n;
        scanf("%d",&t);
        for(i=1;i<=t;i++)
        {
            scanf("%d",&n);
            maketree(1,1,n);
            scanf("%d",&q);
            while(q--)
            {
                scanf("%d%d%d",&a,&b,&v);
                update(1,a,b,v);
            }
            printf("Case %d: The total value of the hook is %d.
    ",i,search(1));
        }
        return 0;
    }
    


  • 相关阅读:
    Oracle异常处理—ORA-12514:监听程序当前无法识别连接描述符中请求的服务
    plsql永久注册码
    spring boot 大文件上传实现方式(二)
    spring boot 大文件上传实现方式(一)
    正则表达式的应用
    正则表达式汇总
    爬虫数据提取——正则表达式
    爬虫基础URL
    Linux环境搭建-在虚拟机中安装Centos7.0(超详细版)
    在虚拟机中安装Centos7.0
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5277298.html
Copyright © 2011-2022 走看看