hyu 1698 Just a Hook
hdu1698 Just a Hook
题目其实是比较基础的线段树区间更新题。然后要注意的是,make树的时候,lazy tag要记得归0(因为个人习惯是在初始化的时候直接把lazy tag=0初始化,因此,如果有多组数据,只是这样做而不在make的时候进行初始化就会有错误。)
#include <bits/stdc++.h>using namespace std;
using ll = long long;const int MAXN = 1e5+10;
struct node
{int l, r;ll sum; ll tag;node(){this->tag = 0;}
};vector<node> tree(MAXN << 2);
ll query(int idx);
void update(int idx, int l, int r, ll v);
void pushDown(int idx);
void make(int idx, int l, int r);
void pushUp(int idx);signed main(){int T; int N; int Q;int l, r;ll v;scanf("%d", &T);for(int ca = 1; ca <= T; ca++){scanf("%d", &N); scanf("%d", &Q);make(1, 1, N);for(int i = 0; i < Q; i++){scanf("%d %d %lld", &l, &r, &v);update(1, l, r, v);}ll ans = query(1);printf("Case %d: The total value of the hook is %lld.\n",ca, ans);}return 0;
}ll query(int idx){return tree[idx].sum;
}void update(int idx, int l, int r, ll v){if(tree[idx].l >=l && tree[idx].r <= r){tree[idx].sum = ll(tree[idx].r - tree[idx].l + 1)*v; tree[idx].tag = v;return;}if(tree[idx].tag != 0) pushDown(idx);int mid = (tree[idx].l + tree[idx].r) / 2;if(l <=mid) update(idx << 1, l, r, v);if(r > mid) update(idx << 1 |1, l, r, v);pushUp(idx);
}void pushDown(int idx){int tag = tree[idx].tag; tree[idx].tag = 0;tree[idx << 1].tag = tag;tree[idx << 1].sum = ll(tree[idx <<1]. r - tree[idx<<1].l + 1)*tag;tree[idx << 1|1].tag = tag;tree[idx << 1|1].sum = ll(tree[idx <<1|1]. r - tree[idx<<1|1].l + 1)*tag;return;
}void make(int idx, int l, int r){if(l == r) {tree[idx].l = l; tree[idx].r = r; tree[idx].tag = 0;tree[idx].sum = 1; return;}int mid = (l + r) >> 1;make(idx << 1, l, mid);make(idx << 1 |1, mid+1, r);tree[idx].l = l; tree[idx].r = r; tree[idx].tag = 0;pushUp(idx);
}void pushUp(int idx){tree[idx].sum = tree[idx << 1].sum + tree[idx <<1 |1].sum;return;
}
hyu 1698 Just a Hook相关推荐
- 线段树专辑——hdu 1698 Just a Hook
http://acm.hdu.edu.cn/showproblem.php?pid=1698 这是一个区间染色的问题,对于区间染色问题,通常的方法是在线段树中定义一个cover域,当cover的值为- ...
- hdu 1698 Just a Hook 线段树区间更新
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698 Let us number the consecutive metallic sticks of ...
- hdu 1698 Just a Hook(线段树区间更新·经典)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1698 数据:case,n,q,q行x,y,z.在长度为n的hook上进行q次区间更新,把它们的价值改变.最 ...
- HDU 1698 Just a Hook 线段树
区间更新中 lazy标记的pushdown操作 风格还是傻崽的...感觉很好用... /********************* Template ************************/ ...
- hdu 1698 Just a Hook(线段树区间修改)
传送门:Just a Hook Problem Description In the game of DotA, Pudge's meat hook is actually the most horr ...
- HDOJ 1698 Just a Hook(线段树成段更新)
题意: 屠夫的钩子区间是1~n,每段可能由铜,银,金组成,价值分别为1,2,3,进行一系列的更新之后,求钩子的总价值. 思路: 线段树的成段更新:要设置一个临时的线段树,每次更新的时候把更新段的值放在 ...
- HDU 1698 Just a Hook (线段树区间修改+区间查询)
题目链接: 传送门 题意:Pudge对装备钩子进行若干次的强化,强化分为三种分别对应的价值是1,2,3,在经历过若干次操作后,输出钩子对应的总价值,每次强化都是对钩子进行区间修改 解题思路:在明白了题 ...
- HDU 1698 Just a Hook(线段树区间更新)
题意: 屠夫是Dota中一个令所有英雄闻风丧胆的英雄.他有一个很长的钩子,这个钩子是用铜做的(刚刚开始都是1),现在他想要更改这些钩子,把某个区间的钩子改为金.银或铜. 输入 L, R, X 表示把 ...
- 转给身边工程师:环形穿梭车控制系统设计细节来了!
导语 大家好,我是智能仓储物流技术研习社的社长,老K.穿梭车在自动化仓储系统中有大量的应用案例,其中尤其以环形穿梭车的复杂程度为最.今天来给大家分享一则环形穿梭车控制系统的项目实例. 查看全文 htt ...
最新文章
- 【android】android中activity的生命周期
- oracle基本概念和术语
- Linux 常用命令全称,看看你 get 到了哪些?
- nmon安装为什么重启mysql_Nmon的安装及使用
- 计算机主机中网卡的作用,计算机硬件组成及作用
- 2019-03-28 SQL Server Pivot
- React中的组件通信——父传子、子传父、Context
- 如何将原图和json融合_用 base64 进行图片和字符串互转,并保存至 json
- CRUD 还能这么玩?
- 华为机试HJ38:求小球落地5次后所经历的路程和第5次反弹的高度
- php短信验证码的前台代码怎么写,php短信验证码接口代码示例
- 李广难封--有感于团队建设
- 9.2 iptables主机防火墙
- 面试送命题,你为什么从上家公司离职?
- 第 8 篇、Linux C 基础 | 运算符
- 2122 还原原数组(枚举,双指针)
- pyqt5做一个工具箱
- php生成动态笔画字体,怎么制作手写文字的动画效果视频 文字一笔一划写出来的动画效果制作...
- linux 备份iphone,备份苹果硬盘的数据
- 【环信IM集成指南】Web端常见问题整理
热门文章
- Linux查看实时网速的Shell
- java version 1.8下载_JDK1.8下载、安装和环境配置教程
- Tomcat使用过滤器实现页面的限制访问,登录才能访问受限页面
- 【Sprint3冲刺之前】敏捷团队绩效考核(刘铸辉)
- flowable 查询完成的流程_flowable中终止流程(一)
- SwiftUI应用开屏广告界面项目(一)
- 【小工具类】将一个十进制数转化成二进制/四进制/八进制/16进制
- python电话号码对应的字符组合_Python3 两种方式查找字符串里的电话号码
- ROS系统MoveIt玩转双臂机器人系列(三)--利用controller控制实际机器人
- 小白学 Python 爬虫(13):urllib 基础使用(三)