【HDU1698】 Just a Hook 【线段树入门】
原题:原题链接
题意:(机器翻译的...)
让我们将钩子的连续金属棒从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 【线段树入门】的更多相关文章
- HDU-1698 JUST A HOOK 线段树
最近刚学线段树,做了些经典题目来练手 Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...
- hdu1698 Just a Hook 线段树:成段替换,总区间求和
转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698 Problem ...
- 【原创】hdu1698 Just a Hook(线段树→区间更新,区间查询)
学习线段树第二天,这道题属于第二简单的线段树,第一简单是单点更新,这个属于区间更新. 区间更新就是lazy思想,我来按照自己浅薄的理解谈谈lazy思想: 就是在数据结构中,树形结构可以线性存储(线性表 ...
- hdu1698 Just a hook 线段树区间更新
题解: 和hdu1166敌兵布阵不同的是 这道题需要区间更新(成段更新). 单点更新不用说了比较简单,区间更新的话,如果每次都更新到底的话,有点费时间. 这里就体现了线段树的另一个重要思想:延迟标记. ...
- HDU1698 Just a Hook —— 线段树 区间染色
题目链接:https://vjudge.net/problem/HDU-1698 In the game of DotA, Pudge’s meat hook is actually the most ...
- hdu-------(1698)Just a Hook(线段树区间更新)
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- hdu1698 Just a Hook 线段树
共有Q个更新,每次更新给更新的区间一个标记,表示该区间是在哪一次被更新,最后统计答案是以最近被更新的值为答案. AC代码: #include<cstdio> const int maxn= ...
- HDU1698:Just a Hook(线段树区域更新模板题)
http://acm.hdu.edu.cn/showproblem.php?pid=1698 Problem Description In the game of DotA, Pudge’s meat ...
- hdu1698 Just a Hook (线段树区间更新 懒惰标记)
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- hdu_1698Just a Hook(线段树)
hdu_1698Just a Hook(线段树) 标签: 线段树 题目链接 题意: 一个英雄的技能是发射一个长度为n的金属链,初始的金属链都是铁做的,标记为1,我们可以对于某个区间修改它的金属材质,如 ...
随机推荐
- CAD类型转换
AcDbEntity *pEnt; AcDbCircle *pcir = AcDbCircle::cast(pEnt); static_cast<AcDbCircle*>(pEnt); p ...
- / Vijos / 题库 /1250 / 最勇敢的机器人
/ Vijos / 题库 /1250 / 最勇敢的机器人 借鉴博客:http://www.cnblogs.com/chty/p/5830516.html 背景 Wind设计了很多机器人.但是它们都认为 ...
- Highcharts教程--把js代码从html中抽离出来,放到单独的一个js文件中。由html页面调用
1.html页面写法 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- fork()调用使子进程先于父进程被调度
由于内核使用写时复制机制,fork之后父子进程是共享页表描述符的,如果让父进程先执行,那么有很大几率父进程会修改共享页表指向的数据,那么内核此时必须给父进程分配并复制新的页表供父进程修改使用,那么如果 ...
- BZOJ 1634 洛谷2878 USACO 2007.Jan Protecting the flowers护花
[题意] 约翰留下他的N只奶牛上山采木.他离开的时候,她们像往常一样悠闲地在草场里吃草.可是,当他回来的时候,他看到了一幕惨剧:牛们正躲在他的花园里,啃食着他心爱的美丽花朵!为了使接下来花朵的损失最小 ...
- Mysql中文乱码以及导出为sql语句和Excel问题解决
Mysql中文乱码以及导出为sql语句和Excel问题解决 这几天基于Heritrix写了一个爬虫,用到mysql,在导入导出数据时,遇到一些乱码问题,好不容易解决了,记录一下,以备查看.一.导出数据 ...
- python中添加日志记录到文件
1.实现python日志功能 2.只输出到文件,不输出到控制台 #encoding:utf-8 import logging from common import path_util logging_ ...
- 【学QT】1 - QT的安装
1.解压文件在/usr/local/下 #tar zxvf qt-x11-free-3.3.8b.tar.gz -C /usr/local 更改文件夹名称为qt #mv /usr/local/qt-x ...
- O - String Problem KMP 字符串最小表示法
Give you a string with length N, you can generate N strings by left shifts. For example let consider ...
- [转]十五天精通WCF——第四天 你一定要明白的通信单元Message
转眼你已经学了三天的wcf了,是不是很好奇wcf在传输层上面到底传递的是个什么鸟毛东西呢???应该有人知道是soap,那soap这叼毛长得是什么 样呢?这一篇我们来揭开答案... 一:soap到底长成 ...