初写线段树的时候,印象最深的一道,有一个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. Func<T,TResult>代理

    .NET平台已经发生了很多变化,最近决定好好的系统的学习一下了,开发做了这么多年,老实说很多时候都是在吃老本,这样下去不行的... 今天学习的是Func<T,TResult>,它是新的委托 ...

  2. Oracle中的数据迁移到Mysql数据库中的方式Navicat premium工具

    1.安装 Navicat premium工具 2.破解 Navicat premium工具 3.连接需要相互迁移的两个库Mysql和Oracle(可以是远程的或者本机的数据库都是可以的) 4.连接上之 ...

  3. 虚拟机安装的ubuntu不能联网解决

    安装双系统从没遇到的问题,再虚拟机上遇到了不能联网的问题: 下面给出我的解决方法(win10系统.ubuntu 16.04) 我的电脑-管理-设备管理器 看是否虚拟机的虚拟网卡在: 在去设置-控制面板 ...

  4. Bugku-web进阶之phpcmsV9(一个靶机而已,别搞破坏。flag在根目录里txt文件里)

    phpcmsV9 一个靶机而已,别搞破坏. flag在根目录里txt文件里 http://123.206.87.240:8001/    

  5. Js代码中的span拼接

    今天遇到一个小需求,用bootstrap的table只有两个字段,占用太宽,页面不美观,组长要求用拼接,一行几列的形式展现出来.我在form表单中拼接了span,遇到以下问题: 1.点击查询,以前生成 ...

  6. 505,display,float,position之间的关系(有疑问)

    (display属性设置元素如何显示) 如果display取值为none,那么position和float都不起作用,这种情况下元素不产生框 否则,如果position设置框是绝对定位,float的计 ...

  7. Atcoder Beginner Contest151E(排列组合)

    排列组合 #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; ]; ; ]; long lo ...

  8. nginx配置指令auth_basic、auth_basic_user_file及相关知识

    参考链接 https://www.jianshu.com/p/1c0691c9ad3c auth_basic_user_file 所需要的密码,可以通过如下方法生成 1)安装htpasswd (yum ...

  9. 69-for和if的嵌套使用

    #include <stdio.h> int main (void) { int i; ; ; i<=; ++i) { == )//%3==0 这个意思是i除以3,余数是0!说普通点 ...

  10. python GIL锁与多cpu

    多核CPU   linux : cat /proc/cpuinfo 如果你不幸拥有一个多核CPU,你肯定在想,多核应该可以同时执行多个线程. 如果写一个死循环的话,会出现什么情况呢? 打开Mac OS ...