原题:原题链接

题意:(机器翻译的...)

让我们将钩子的连续金属棒从1到N编号。对于每次操作,Pudge可以将连续的金属棒(从X到Y编号)改为铜棒,银棒或金棒。

钩的总值计算为N个金属棒的值的总和。更确切地说,每种棒的值计算如下:

对于每个铜棒,值为1.

对于每个银棒,值为2.

对于每个金棒,值为3.

Pudge想知道执行操作后钩子的总值。

你可能会认为原来的钩子是由铜棒组成的。

【思路】

线段树-区间更新lazy_tag

PS:原来都是1,不是0,因为这个卡了好久

#include<iostream>
#include<cstdio>
#include<cctype>
#include<algorithm>
#define MAXN 100005
using namespace std; inline int read()
{
char chr=getchar();
int f=1,ans=0;
while(!isdigit(chr)) {if(chr=='-') f=-1;chr=getchar();}
while(isdigit(chr)) {ans=ans*10;ans+=chr-'0';chr=getchar();}
return ans*f; } struct node{
int l,r;
int val,lazy;
int mid(){
return l+r>>1;
}
}t[MAXN<<2];
int a[MAXN];
int n,m;
void push_up(int x){//上传
t[x].val=t[x<<1].val+t[x<<1|1].val;
}
void push_down(int x){//下传
if(t[x].lazy){
t[x<<1].lazy=t[x].lazy;
t[x<<1|1].lazy=t[x].lazy;//如果是加上一个数的话,要写+=,改成一个数的话直接等于
t[x<<1].val=(t[x<<1].r-t[x<<1].l+1)*t[x<<1].lazy;
t[x<<1|1].val=(t[x<<1|1].r-t[x<<1|1].l+1)*t[x<<1|1].lazy;
t[x].lazy=0;
}
}
void build(int i,int l,int r){//建树
t[i].l=l;
t[i].r=r;
t[i].lazy=0;
if(l==r){
t[i].val=1;//初始铜棒——》 1
return;
}
build(i<<1,t[i].l,t[i].mid());
build(i<<1|1,t[i].mid()+1,t[i].r);
push_up(i);
} void updata(int i,int l,int r,int v){//更新
if(l<=t[i].l && t[i].r<=r){
t[i].val=(t[i].r-t[i].l+1)*v;//这里要注意(r-l+1)*v,不是v
t[i].lazy=v;
return;
}
push_down(i);//记得下传
int m=t[i].mid();
if(l<=m) updata(i<<1,l,r,v);
if(r>m) updata(i<<1|1,l,r,v);
push_up(i);//...
} int query(int i,int l,int r){
if(l<=t[i].l && t[i].r<=r) return t[i].val;
push_down(i);//敲黑板:这里不要忘了
int m=t[i].mid();
int sum=0;
if(l<=m) sum+=query(i<<1,l,r);
if(m<r) sum+=query(i<<1|1,l,r);
push_up(i);
return sum;
}
int T;
int main()
{
T=read(); int tot=0;
while(T--){
n=read();
build(1,1,n);
m=read();
while(m--){
int x=read(),y=read(),v=read();
updata(1,x,y,v);//更新
}
printf("Case %d: The total value of the hook is %d.\n",++tot,query(1,1,n));//格式很强
}
return 0;
}

【HDU1698】 Just a Hook 【线段树入门】的更多相关文章

  1. HDU-1698 JUST A HOOK 线段树

    最近刚学线段树,做了些经典题目来练手 Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...

  2. hdu1698 Just a Hook 线段树:成段替换,总区间求和

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698 Problem ...

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

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

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

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

  5. HDU1698 Just a Hook —— 线段树 区间染色

    题目链接:https://vjudge.net/problem/HDU-1698 In the game of DotA, Pudge’s meat hook is actually the most ...

  6. hdu-------(1698)Just a Hook(线段树区间更新)

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

  7. hdu1698 Just a Hook 线段树

    共有Q个更新,每次更新给更新的区间一个标记,表示该区间是在哪一次被更新,最后统计答案是以最近被更新的值为答案. AC代码: #include<cstdio> const int maxn= ...

  8. HDU1698:Just a Hook(线段树区域更新模板题)

    http://acm.hdu.edu.cn/showproblem.php?pid=1698 Problem Description In the game of DotA, Pudge’s meat ...

  9. hdu1698 Just a Hook (线段树区间更新 懒惰标记)

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

  10. hdu_1698Just a Hook(线段树)

    hdu_1698Just a Hook(线段树) 标签: 线段树 题目链接 题意: 一个英雄的技能是发射一个长度为n的金属链,初始的金属链都是铁做的,标记为1,我们可以对于某个区间修改它的金属材质,如 ...

随机推荐

  1. linux mysql-workbench 创建与正式库表结构一样的表

    先在本地创建数据库 字符集选择这个 创建数据库成功 创建与正式库一样的表 step1: 连接正式库,找到要生成的表,导出创建表的sql语句 step2: 找到本地数据库,选择表,在sql执行区域复制s ...

  2. css的基础知识1

    总结:css引用:1内联:在标签中加style属性,<标签名 style="样式1:样式值1:样式2:样式值2"> </标签名>.2.内嵌:在head标签中 ...

  3. 源码安装apache脚本

    #!/bin/bash#By:zhaocheng#Date:2019-01-18 [ -d /media/cdrom ] || mkdir /media/cdrom[ -d /media/cdrom/ ...

  4. ThinkPHP5.1安装

    安装 ====== 按照官方的推荐方式,推荐使用composer方式安装 TP5.1环境要求 PHP >= 5.6.0 PDO PHP Extension MBstring PHP Extens ...

  5. PAT 1106 Lowest Price in Supply Chain

    A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone invo ...

  6. 为什么有些图像在显示前要除以255?(zhuan)

    imshow是用来显示图片的,如 >> I = imread('moon.tif'); >> figure,imshow(I); 而有时为了数据处理,要把读取的图片信息转化为更 ...

  7. web开发如何使用高德地图API(四)通过AMap.Marker自定义标点

    说两句: 以下内容除了我自己写的部分,其他部分在高德开放平台都有(可点击外链访问). 我所整理的内容以实际项目为基础希望更有针对性的,更精简. 点击直奔主题. 准备工作: 首先,注册开发者账号,成为高 ...

  8. U - Palindrome Manacher

    Andy the smart computer science student was attending an algorithms class when the professor asked t ...

  9. 一个oracle bug

    最近发现一个RAC db的listener log增长特别快,于是去查看了一下. 先是查看了一下log的内容,发现都是 service_update这种内容,刷新的特别快. service_updat ...

  10. nyoj891(区间上的贪心)

    题目意思: 给一些闭区间,求最少须要多少点,使得每一个区间至少一个点. http://acm.nyist.net/JudgeOnline/problem.php?pid=891 例子输入 4 1 5 ...