HDOJ1698 Just a hook【线段树---成段更新---lazy标志】

简介:

 

复制代码
/*
1
10
2
1 5 2
5 9 3
*/
#include <stdio.h>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define maxn 111111
int sum[maxn<<2],lazy[maxn<<2];
void PullUp(int rt)//上拉
{
    sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}
void PushDown(int rt,int len)//下推
{
    lazy[rt<<1]=lazy[rt<<1|1]=lazy[rt];
    sum[rt<<1]=lazy[rt]*(len-(len>>1));
    sum[rt<<1|1]=lazy[rt]*(len>>1);
    lazy[rt]=0;
}
void build(int l,int r,int rt)
{
    int m=(l+r)>>1;
    lazy[rt]=0;
    if(l==r){
        sum[rt]=1;
        return;
    }
    build(lson);
    build(rson);
    PullUp(rt);
}
void update(int z,int L,int R,int l,int r,int rt)
{
    int m=(l+r)>>1;
    if(l>=L&&r<=R){//当前区间是更新区间的子集,则一定要更新
        lazy[rt]=z;//标记
        sum[rt]=(r-l+1)*z;//更新当前区间
        return;
    }
    if(lazy[rt])PushDown(rt,r-l+1);//延迟标记下传一层
    if(L<=m)    update(z,L,R,lson);//左子树上有一部分
    if(R>m)        update(z,L,R,rson);//右子树上有一部分
    PullUp(rt);//上推
}
int main()
{
    int t,n,q,x,y,z,i;
    scanf("%d",&t);
    for (i=1;i<=t;i++){
        scanf("%d",&n);
        build(1,n,1);
        scanf("%d",&q);
        while (q--){
            scanf("%d%d%d",&x,&y,&z);
            update(z,x,y,1,n,1);
        }
        printf("Case %d: The total value of the hook is %d.\n",i,sum[1]);
    }
    return 0;
}
复制代码

 

 


本文转自ZH奶酪博客园博客,原文链接:http://www.cnblogs.com/CheeseZH/archive/2012/05/02/2479803.html,如需转载请自行联系原作者

相关文章
13avalon - 指令ms-skip (skip绑定)
13avalon - 指令ms-skip (skip绑定)
48 0
|
3月前
【bug记录】旋转链表与力扣报错:member access within null pointer of type ‘struct ListNode‘
【bug记录】旋转链表与力扣报错:member access within null pointer of type ‘struct ListNode‘
|
2月前
|
JavaScript
Vue+element_Table树形数据与懒加载报错Error in render: “RangeError: Maximum call stack size exceeded“
本文讨论了在使用Vue和Element UI实现树形数据和懒加载时遇到的“Maximum call stack size exceeded”错误,指出问题的原因通常是因为数据中的唯一标识符`id`不唯一,导致递归渲染造成调用栈溢出。
93 1
Vue+element_Table树形数据与懒加载报错Error in render: “RangeError: Maximum call stack size exceeded“
|
2月前
|
人工智能 JavaScript 索引
Duplicate keys detected: This may cause an update error.【Vue遍历渲染报错的解决】
这篇文章讨论了在Vue中进行列表渲染时遇到的“Duplicate keys detected”错误。这个错误通常发生在使用 `v-for` 指令渲染列表时,如果没有为每个循环项指定一个唯一的 `key` 属性,或者指定的 `key` 属性值重复了。文章提供了导致错误的原始代码示例,并给出了修正后的代码,通过在 `key` 绑定中加入索引确保 `key` 的唯一性。此外,文章还解释了为什么需要唯一 `key` 以及如何解决这个问题。
Duplicate keys detected: This may cause an update error.【Vue遍历渲染报错的解决】
|
5月前
|
消息中间件 监控 Serverless
函数计算操作报错合集之显示报错:RecursionError: maximum recursion depth exceeded while calling a Python object,该如何解决
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
144 0
|
11月前
|
JavaScript API 数据库
node.js报错 Cannot enqueue Query after invoking quit.
今天进行连接数据库的时候,遇到这个错误,于是染念就开始debug time了。 首先,我们需要了解一下node.js里的回调函数 Node.js 异步编程的直接体现就是回调。 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。
138 0
|
JavaScript 前端开发
关于 this 指向、如何实现 new call apply bind 我所知道的
关于 this 指向、如何实现 new call apply bind 我所知道的
81 0
每日一题---27. 移除元素[力扣][Go]
每日一题---27. 移除元素[力扣][Go]
每日一题---27. 移除元素[力扣][Go]
|
机器学习/深度学习 算法 图计算
图学习【参考资料2】-知识补充与node2vec代码注解
1. 回顾并总结了图的基本概念。 2. 学习思考算法实现的代码思路--Node2Vec的实现以及RandomWalk的实现。 3. 对源码阅读能力的提升。
|
JavaScript 前端开发 Shell
在child_process域和错误的冒泡和捕获实践【Note.js】
在child_process域和错误的冒泡和捕获实践【Note.js】