线段树(lazy)-hdu1689
题目链接:https://vjudge.net/problem/HDU-1698
题目描述:


现在Pudge想做一些操作。让我们将钩子的连续金属棒从1编号到N。对于每个操作,Pudge可以将连续金属棒(编号为X到Y)更改为铜棒、银棒或金棒。钩的总值是N根金属棒的总和。更确切地说,每种棍棒的价值计算如下:对于每个铜棒,其值为1。对于每个银棒,其值为2。对于每个金棒,其值为3。Pudge希望知道在执行操作后钩子的总值。你可以认为原来的钩子是用铜棒做的。
输入:
输入由几个测试用例组成。输入的第一行是实例的数目。不超过10例。对于每种情况,第一行包含一个整数N,1<=N<=100000,它是Pudge的钩子的棒的数量,而第二行包含一个整数Q,0<=Q<=100000,它是操作的数量。接下来的Q行,每行包含三个整数X,Y,1<=X<=Y<=N,Z,1<=Z<=3,它定义了一个操作:将编号从X到Y的棒变为金属类Z,其中Z=1表示铜类,Z=2表示银类,Z=3表示金类。
输出:
对于每种情况,在操作之后用表示钩子总值的行中打印出钩子的总价值。使用示例中的格式。
代码实现:
#include <cstdio> using namespace std;
const int MAXN = 1e6;
int N;
typedef long long ll; struct node{
int l,r;
ll sum,lazy;
void update(ll x){//将(r-l)之间的value值变为x,即对sum进行修改
sum=1ll*(r-l+)*x;///1LL是为了在计算时,把int类型的变量转化为long long,然后再赋值给long long类型的变量。
lazy=x;
}
}tree[MAXN<<];
//相当于压栈操作
void push_up(int x){
tree[x].sum=tree[x<<].sum+tree[x<<|].sum;
} void push_down(int x){
ll lazyval=tree[x].lazy;
if(lazyval>){
tree[x<<].update(lazyval);
tree[x<<|].update(lazyval);
tree[x].lazy=;//将其变为0,便于后续操作,因为后续还可能对该区间做更改
}
}
//build(1,1,n),从第一个区间开始建立
void build(int x,int l,int r){
tree[x].lazy=tree[x].sum=;
tree[x].l=l;tree[x].r=r;
if(l==r){
tree[x].sum=;
return;
}
int mid=(l+r)/;
build(x<<,l,mid);
build(x<<|,mid+,r);
push_up(x);//相当于压栈操作
}
//update(1,l,r,val),从第一个区间开始更新
void update(int x,int l,int r,ll val){
int L=tree[x].l,R=tree[x].r;
if(l<=L && R<=r){//保证区间[L,R]处在区间(l,r)内部
tree[x].update(val);//直接进入结构体内部对sum值进行修改
return ;
}
push_down(x);
int mid=(L+R)/;
if(mid>=l)
update(x<<,l,r,val);
if(mid<r)
update(x<<|,l,r,val);
push_up(x);
}
//query(1,1,N),从第一个区间开始查询
ll query(int x,int l,int r){
int L=tree[x].l,R=tree[x].r;
if(l<=L && R<=r)
return tree[x].sum;
push_down(x);
int mid=(L+R)/;
ll ans=;
if(mid>=l)
ans+=query(x<<,l,r);
if(mid<r)
ans+=query(x<<|,l,r);
return ans;
} int main(){
int T;
scanf("%d",&T);
int cae=;
while(T--){
scanf("%d",&N);
build(,,N);
int M;scanf("%d",&M);
while(M--){
int l,r;
ll val;
scanf("%d%d%lld",&l,&r,&val);
update(,l,r,val);
}
printf("Case %d: The total value of the hook is %lld.\n",++cae,query(,,N));
}
return ;
}
线段树(lazy)-hdu1689的更多相关文章
- JuQueen(线段树 lazy)
JuQueen Time Limit: 5 Sec Memory Limit: 512 MB Description Input Output Sample Input 10 10 5 state ...
- 分块+lazy 或者 线段树+lazy Codeforces Round #254 (Div. 2) E
E. DZY Loves Colors time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- POJ 2777——线段树Lazy的重要性
POJ 2777 Count Color --线段树Lazy的重要性 原题 链接:http://poj.org/problem?id=2777 Count Color Time Limit: 1000 ...
- poj3468 线段树+lazy标记
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 92921 ...
- poj 2777(线段树+lazy思想) 小小粉刷匠
http://poj.org/problem?id=2777 题目大意 涂颜色,输入长度,颜色总数,涂颜色次数,初始颜色都为1,然后当输入为C的时候将x到y涂为颜色z,输入为Q的时候输出x到y的颜色总 ...
- hdu 1698 Just a Hook 【线段树+lazy】
题目 写了一天的线段树,这道题主要说明一下sum是赋值的,不是累加的,并且在push_down的时候lazy也是赋值的.因可能对懒标记的理解还不是很透彻吧. #include <iostream ...
- HDU3577Fast Arrangement(线段树+lazy)
Problem Description Chinese always have the railway tickets problem because of its' huge amount of p ...
- HDU 3954 Level up(多颗线段树+lazy操作)
又是一开始觉得的水题,结果GG了好久的东西... 题意是给你n个英雄,每个英雄开始为1级经验为0,最多可以升到k级并且经验一直叠加,每一级都有一个经验值上限,达到就升级.接着给你两种操作:W li r ...
- POJ3237 Tree(树剖+线段树+lazy标记)
You are given a tree with N nodes. The tree’s nodes are numbered 1 through N and its edges are numbe ...
- poj 3237 树链剖分模板(用到线段树lazy操作)
/* 本体在spoj375的基础上加了一些操作,用到线段树的lazy操作模板类型 */ #include<stdio.h> #include<string.h> #includ ...
随机推荐
- js——事件冒泡与捕获小例子
布局代码 #outer{ width: 300px; height: 300px; background: red; } #inner{ width: 200px; height: 200px; ba ...
- SoapUI、Jmeter、Postman三种接口测试工具的比较分析
前段时间忙于接口测试,也看了几款接口测试工具,简单从几个角度做了个比较,拿出来与诸位分享一下吧.各位如果要转载,请一定注明来源,最好在评论中告知博主一声,感谢.本报告从多个方面对接口测试的三款常用工具 ...
- mysql5.7设置简单密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
注:本文来源于< mysql5.7设置简单密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy r ...
- 修改Mysql5.7的root密码
Mysql5.7修改root密码 禁用root密码 1.修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不 ...
- 表达式语言 Expression Language
JSP 2.0最重要的特性之一就是表达式语言 (EL),JSP用户可以用它来访问应用程序数据.由于 受到ECMAScript和XPath表达式语言的启发,EL也设计 成可以轻松地编写免脚本的JSP页面 ...
- Advanced Wlan Attacks (RADIUS)
1.查询连接到无线接入点的情况 使用命令 airodump-ng wlan0mon 可以看到 有用的信息.我们知道如果有一个客户端使用验证码成功连接到. 顺便查一下其中一个连接的设备的MAC地址的 ...
- element-ui中用el-dialog+el-table+el-pagination实现文件默认选中且在分页的条件下有记忆功能
需求: 点击按钮,出现列表弹框,选择需要的选项确认后显示选中的选项.每次点击按钮,列表中默认显示之前选中的文件. el-table-column,设type属性为selection,实现表格中多行选择 ...
- 论文阅读笔记二十八:You Only Look Once: Unified,Real-Time Object Detection(YOLO v1 CVPR2015)
论文源址:https://arxiv.org/abs/1506.02640 tensorflow代码:https://github.com/nilboy/tensorflow-yolo 摘要 该文提出 ...
- 使用asp.net MVC的 HtmlHelper 时遇到的小问题,报错:Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.
异常信息:Templates can be used only with field access, property access, single-dimension array index, or ...
- 有一个字典对象,d = {'a':1,'b':2},请用尽量简洁的代码将d转换成{1: 'a', 2: 'b'}
题目:有一个字典对象,d = {'a':1,'b':2},请用尽量简洁的代码将d转换成{1: 'a', 2: 'b'} 第一种方法: d = {'a': 1, 'b': 2}d = {value: k ...