码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 1698 Just a Hook

时间:2014-08-10 10:27:20      阅读:310      评论:0      收藏:0      [点我收藏+]

标签:style   os   io   for   ar   代码   amp   size   

题意:给你一个数为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.\n",i,search(1));
    }
    return 0;
}


HDU 1698 Just a Hook,布布扣,bubuko.com

HDU 1698 Just a Hook

标签:style   os   io   for   ar   代码   amp   size   

原文地址:http://blog.csdn.net/u012313382/article/details/38467123

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!