初写线段树的时候,印象最深的一道,有一个pushdown的操作,使我的tle变成了ac

题意

输入t,然后t组数据

输入n,m,n代表n个点上价值全是1的绳子,m代表m次操作

m行l,r,val  就是区间l,r变成val

求最后绳子总共价值

思路

线段树,懒人标记

 #include<queue>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<cmath>
#include<string>
#include<vector>
#include<functional>
#define inf 0x3f3f3f3f
#define mem(k,b) memset(k,b,sizeof(k))
#define ll long long
#define ls (x)<<1
#define rs (x)<<1|1
#define lson ls,l,mid
#define rson rs,mid+1,r
using namespace std;
const int maxn = ; int t, n, m, q, p, z;
int tree[maxn << ], add[maxn << ]; void pushup(int x) {
tree[x] = tree[ls] + tree[rs];
return;
} void pushdown(int x, int len){
if (add[x]){
add[ls] = add[x];
add[rs] = add[x];
tree[ls] = add[x] * (len - (len >> ));
tree[rs] = add[x] * (len >> );
add[x] = ;
}
} void build(int x, int l, int r){
add[x] = ;
if (l == r){
tree[x] = ;
return;
}
int mid = (l + r) >> ;
build(lson); build(rson);
pushup(x);
} void xiugai(int x, int l, int r, int l1, int r1,int zhi1){
if (l >= l1 && r<=r1){
add[x] = zhi1;
tree[x] = zhi1*(r - l + );
return;
}
pushdown(x, r - l + );
int mid = (l + r) >> ;
if (r1<= mid){
xiugai(lson, l1, r1, zhi1);
}
else if (l1>mid){
xiugai(rson, l1, r1, zhi1);
}
else{
xiugai(lson, l1, mid, zhi1);
xiugai(rson, mid + , r1, zhi1);
}
pushup(x);
} int main(){
int c = ;
scanf("%d",&t);
while (t--){
scanf("%d%d",&n,&m);
build(, , n);
for (int i = ; i < m; i++){
scanf("%d%d%d",&q,&p,&z);
xiugai(, , n, q, p, z);
}
printf("Case %d: The total value of the hook is %d.\n",c++,tree[]);
}
return ;
}

hdu1698 区间更新的更多相关文章

  1. hdu1698 线段树区间更新

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  2. hdu1698线段树的区间更新区间查询

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  3. 【原创】hdu1698 Just a Hook(线段树→区间更新,区间查询)

    学习线段树第二天,这道题属于第二简单的线段树,第一简单是单点更新,这个属于区间更新. 区间更新就是lazy思想,我来按照自己浅薄的理解谈谈lazy思想: 就是在数据结构中,树形结构可以线性存储(线性表 ...

  4. HDU1698:Just a Hook(线段树区间更新)

    Problem Description In the game of DotA, Pudge’s meat hook is actually the most horrible thing for m ...

  5. hdu1698 Just a hook 线段树区间更新

    题解: 和hdu1166敌兵布阵不同的是 这道题需要区间更新(成段更新). 单点更新不用说了比较简单,区间更新的话,如果每次都更新到底的话,有点费时间. 这里就体现了线段树的另一个重要思想:延迟标记. ...

  6. HDU 1556 Color the ball(线段树区间更新)

    Color the ball 我真的该认真的复习一下以前没懂的知识了,今天看了一下线段树,以前只会用模板,现在看懂了之后,发现还有这么多巧妙的地方,好厉害啊 所以就应该尽量搞懂 弄明白每个知识点 [题 ...

  7. hihoCoder 1080 : 更为复杂的买卖房屋姿势 线段树区间更新

    #1080 : 更为复杂的买卖房屋姿势 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们 ...

  8. hdu 3397 Sequence operation(线段树:区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3397 题意:给你一个长度为n的0,1序列,支持下列五种操作, 操作0(0 a b):将a到b这个区间的 ...

  9. 【HDU 4614】Vases and Flowers(线段树区间更新懒惰标记)

    题目0到n-1的花瓶,操作1在下标a开始插b朵花,输出始末下标.操作2清空[a,b]的花瓶,求清除的花的数量.线段树懒惰标记来更新区间.操作1,先查询0到a-1有num个空瓶子,然后用线段树的性质,或 ...

随机推荐

  1. 利用Ajax实现数据的同步传输,从mysql中提取数据,通过echarts可视化

    如何将mysql数据库中的方式通过echarts可视化呢,以下面这个简单的例子向大家进行演示:   步骤一:mysql的创表和插入数据,当然这些数据也可以是你通过爬虫抓取的.     步骤二:   创 ...

  2. python测量代码运行时间方法

    Python 社区有句俗语: “python自己带着电池” ,别自己写计时框架. Python3.2具备一个叫做 timeit 的完美计时工具可以测量python代码的运行时间. timeit 模块: ...

  3. 网络常识---tracert

    当打不开一个网页,可以是用如下命令查看请求的数据走到哪里了 在命令行中输入“tracert ”并在后面加入一个IP地址,可以查询从本机到该IP地址所在的电脑要经过的路由器及其IP地址

  4. easy-rules

    我们在写业务代码经常遇到需要一大堆if/else,会导致代码可读性大大降低,有没有一种方法可以避免代码中出现大量的判断语句呢?答案是用规则引擎,但是传统的规则引擎都比较重,比如开源的Drools,不适 ...

  5. java.sql.SQLException: Access denied for user 'gaoqi'@'127.0.0.1' (using password: YES)

    GRANT ALL PRIVILEGES ON *.* TO root @'%' IDENTIFIED BY "mypassword";--%表示所有的IP都能访问,也可以修改为专 ...

  6. echarts制作html和JavaScript的时钟和代码分析与注释

    1.效果图 2.说明: 2.1 代码是大神制作的,我进行修改,感谢大神,原创属于他. 2.2 我对代码进行分析.注释.整理,增加代码的可读性. 2.3 通过上述自己的工作,自己也能熟悉相关的JavaS ...

  7. 每天进步一点点------SOPC的Avalon-MM IP核(四) KEY_LED IP定制

    /********************************************************************************* * Company : * Eng ...

  8. P &R 12

    Floorplan包含: IO floorplan: 涉及板级设计.封装设计的交互,接口协议(timing相关),对一些高速接口需要做特殊考虑(如信号完整性等). Power plan:芯片的电源和低 ...

  9. 手写webpack配置文件

    webpack是一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都作为模块来使用和处理,它能有Grunt或Gulp所有基本功能. We ...

  10. 虚拟机安装archLinux+xfce桌面教程(更新时间2017-5-8)

    本教程转自http://blog.sina.com.cn/u/5692023517 感谢大神写出如此详细的教程并允许转载 本教程的目的:为了让新手安装arch不再那么难, 一个好的教程可以少走很多弯路 ...