题目链接: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的更多相关文章

  1. JuQueen(线段树 lazy)

    JuQueen Time Limit: 5 Sec  Memory Limit: 512 MB Description Input Output Sample Input 10 10 5 state ...

  2. 分块+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 ...

  3. POJ 2777——线段树Lazy的重要性

    POJ 2777 Count Color --线段树Lazy的重要性 原题 链接:http://poj.org/problem?id=2777 Count Color Time Limit: 1000 ...

  4. poj3468 线段树+lazy标记

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 92921   ...

  5. poj 2777(线段树+lazy思想) 小小粉刷匠

    http://poj.org/problem?id=2777 题目大意 涂颜色,输入长度,颜色总数,涂颜色次数,初始颜色都为1,然后当输入为C的时候将x到y涂为颜色z,输入为Q的时候输出x到y的颜色总 ...

  6. hdu 1698 Just a Hook 【线段树+lazy】

    题目 写了一天的线段树,这道题主要说明一下sum是赋值的,不是累加的,并且在push_down的时候lazy也是赋值的.因可能对懒标记的理解还不是很透彻吧. #include <iostream ...

  7. HDU3577Fast Arrangement(线段树+lazy)

    Problem Description Chinese always have the railway tickets problem because of its' huge amount of p ...

  8. HDU 3954 Level up(多颗线段树+lazy操作)

    又是一开始觉得的水题,结果GG了好久的东西... 题意是给你n个英雄,每个英雄开始为1级经验为0,最多可以升到k级并且经验一直叠加,每一级都有一个经验值上限,达到就升级.接着给你两种操作:W li r ...

  9. 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 ...

  10. poj 3237 树链剖分模板(用到线段树lazy操作)

    /* 本体在spoj375的基础上加了一些操作,用到线段树的lazy操作模板类型 */ #include<stdio.h> #include<string.h> #includ ...

随机推荐

  1. PL/SQL设置

    PL/SQL 自定义快捷键(比如输入s,直接就显示select * from) 1.1 修改Code assistant快捷键tools->preferences->User Interf ...

  2. yun

    # Author:zhang# -*- coding:utf-8 -*-"""https://workyun.com/ 云端工作"""imp ...

  3. Confluence 6 属性的一个活动

    为了启用属性,使用上面描述的方法.针对所有的用户,属性每一个访问的页面,将会在你的应用服务器中进行记录,直到你对 Confluence 进行重启.请注意每次用户访问一个链接,一个单一的属性将会被打印出 ...

  4. PL\SQL 随学笔记

    一.在PL\SQL语句块begin...end;中,不能直接使用select,必须与into结合查询. 例如: declare aa:=22; id2 integer; begin select * ...

  5. Redis事务概念

    redis事务与监控 Author:SimpleWu GitHub-redis 在redis中它的事务与批处理非常相似 Redis中的事务(transaction)是一组命令的集合.事务同命令一样都是 ...

  6. Django中各目录文件的作用

    一般的项目结构如下(大同小异) my_site是一个项目,blog是项目下的应用之一,可以使用创建命令创建更多的应用. 最上层的django文件夹: 自己手动创建,名字随意. 第二层my_site文件 ...

  7. docker文件复制到centos/linux/ubantun环境下

    1.有些时候我们需要将容器里面的文件,弄到系统里面来分析,像报错log等 格式:docker  cp  容器名:文件在容器里面的路径       要拷贝到宿主机的对应路径 2.有些情况下,我们需要将文 ...

  8. asp.net core 缓存和Session

    缓存 缓存在内存中 ASP.NET Core 使用 IMemoryCache内存中缓存是使用依赖关系注入从应用中引用的服务. 请在ConfigureServices中调用AddMemoryCache( ...

  9. web页在微信中访问增加遮罩层 右上角弹出在浏览器中打开

    https://blog.csdn.net/zgsdzczh/article/details/79744838 web页在微信中访问增加遮罩层 右上角弹出在浏览器中打开   <style typ ...

  10. 在CI框架中如何实现伪静态

    第一步:在根目录下(index.PHP)同一级目录下建立一个.htaccess这个文件文件内容(即红色标识所显示的内容) URI 类 和 URL 辅助函数 包含了一些函数可以让你更容易的处理 URI ...