博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线段树-区间更新-HDU 1689
阅读量:5126 次
发布时间:2019-06-13

本文共 1567 字,大约阅读时间需要 5 分钟。

 

#include <iostream>

#include <cstdio>

#include <string>

#include <cstring>

#include <fstream>

#include <algorithm>

#include <cmath>

#include <queue>

#include <stack>

#include <vector>

#include <map>

#include <set>

#include <iomanip>

 

using namespace std;

#define maxn 200005

#define MOD 1000000007

#define mem(a , b) memset(a , b , sizeof(a))

#define LL long long

#define ULL unsigned long long

const long long INF=0x3fffffff;

 

int n,m;

 

LL add[maxn<<2];

LL sum[maxn<<2];

void pushUp(int root)

{

    sum[root]=sum[root<<1]+sum[root<<1|1];

}

 

void pushDown(int root,int m)

{

    if(add[root]>0)

    {

        add[root<<1]=add[root];

        add[root<<1|1]=add[root];

        sum[root<<1]=(m-(m>>1))*add[root];

        sum[root<<1|1]=(m>>1)*add[root];

        add[root]=0;

    }

}

 

void build(int l,int r,int root)

{

    add[root]=0;

    if(l==r)

    {

        sum[root]=1;

        return ;

    }

    int mid=(l+r)>>1;

    build(l,mid,root<<1);

    build(mid+1,r,root<<1|1);

    pushUp(root);

}

 

void updata(int rootL,int rootR,int v,int l,int r,int root)

{

    if(rootL<=l&&rootR>=r)

    {

        add[root]=v;

        sum[root]=add[root]*(r-l+1);

    }

    else

    {

        pushDown(root,r-l+1);

        int mid=(r+l)>>1;

        if(rootL<=mid)

            updata(rootL, rootR, v, l, mid, root<<1);

        if(rootR>mid)

            updata(rootL, rootR, v, mid+1, r, root<<1|1);

        pushUp(root);

    }

}

 

int main()

{

    int T;

    int k=1;

    scanf("%d",&T);

    while(T--)

    {

        //mem(add,0);

        scanf("%d",&n);

        build(1,n,1);

        scanf("%d",&m);

        while(m--)

        {

            int rootL,rootR,v;

            scanf("%d%d%d",&rootL,&rootR,&v);

            updata(rootL, rootR, v, 1, n, 1);

        }

        printf("Case %d: The total value of the hook is ",k++);

        printf("%lld.\n",sum[1]);

    }

    return 0;

}

转载于:https://www.cnblogs.com/xiao-xue-di/p/8404483.html

你可能感兴趣的文章
Andriod小型管理系统(Activity,SQLite库操作,ListView操作)(源代码下载)
查看>>
在Server上得到数据组装成HTML后导出到Excel。两种方法。
查看>>
浅谈项目需求变更管理
查看>>
经典算法系列一-快速排序
查看>>
设置java web工程中默认访问首页的几种方式
查看>>
ASP.NET MVC 拓展ViewResult实现word文档下载
查看>>
8、RDD持久化
查看>>
第二次团队冲刺--2
查看>>
VMware Tools安装
查看>>
Linux上架设boost的安装及配置过程
查看>>
[转载]加密算法库Crypto——nodejs中间件系列
查看>>
zoj 2286 Sum of Divisors
查看>>
使用Xshell密钥认证机制远程登录Linux
查看>>
OpenCV之响应鼠标(三):响应鼠标信息
查看>>
Android 画图之 Matrix(一)
查看>>
List<T>列表通用过滤模块设计
查看>>
【模板】最小生成树
查看>>
设计模式之结构型模式
查看>>
poj2569
查看>>
使用pygal_maps_world.i18n中数据画各大洲地图
查看>>