HDU 1698 Just a Hook(线段树区间更新查询)
描述
Now Pudge wants to do some operations on the hook.
Let us number the consecutive metallic sticks of the hook from 1 to
N. For each operation, Pudge can change the consecutive metallic
sticks, numbered from X to Y, into cupreous sticks, silver sticks or
golden sticks.
The total value of the hook is calculated as the sum of values of N
metallic sticks. More precisely, the value for each kind of stick is
calculated as follows:
For each cupreous stick, the value is 1.
For each silver stick, the value is 2.
For each golden stick, the value is 3.
Pudge wants to know the total value of the hook after performing the operations.
You may consider the original hook is made up of cupreous sticks.
the input is the number of the cases. There are no more than 10 cases.
For each case, the first line contains an integer N,
1<=N<=100,000, which is the number of the sticks of Pudge’s meat
hook and the second line contains an integer Q, 0<=Q<=100,000,
which is the number of the operations.
Next Q lines, each line contains three integers X, Y,
1<=X<=Y<=N, Z, 1<=Z<=3, which defines an operation:
change the sticks numbered from X to Y into the metal kind Z, where Z=1
represents the cupreous kind, Z=2 represents the silver kind and Z=3
represents the golden kind.
OutputFor each case, print a number in a line representing the
total value of the hook after the operations. Use the format in the
example.
Sample Input
10
2
1 5 2
5 9 3
Case 1: The total value of the hook is 24.
- #include<stdio.h>
- #include<string.h>
- const int N=1e5+;
- int sum[N<<],lazy[N<<],ans;
- void PushDown(int rt)
- {
- if(lazy[rt])
- {
- lazy[rt<<]=lazy[rt<<|]=lazy[rt];
- lazy[rt]=;
- }
- }
- void Update(int L,int R,int C,int l,int r,int rt)
- {
- if(L<=l&&r<=R)
- {
- lazy[rt]=C;
- return;
- }
- int mid=(l+r)>>;
- PushDown(rt);
- if(L<=mid)Update(L,R,C,l,mid,rt<<);
- if(R>mid)Update(L,R,C,mid+,r,rt<<|);
- }
- void Query(int l,int r,int rt)
- {
- if(lazy[rt]==-||lazy[rt]==)
- {
- ans+=r-l+;
- return;
- }
- else if(lazy[rt]==)
- {
- ans+=*(r-l+);
- return;
- }
- else if(lazy[rt]==)
- {
- ans+=*(r-l+);
- return;
- }
- int mid=(l+r)>>;
- if(l<=mid)Query(l,mid,rt<<);
- if(r>mid)Query(mid+,r,rt<<|);
- }
- int main()
- {
- int t,n,q,x,y,z,o=;
- scanf("%d",&t);
- while(t--)
- {
- memset(lazy,-,sizeof lazy);
- scanf("%d%d",&n,&q);
- for(int i=;i<q;i++)
- {
- scanf("%d%d%d",&x,&y,&z);
- Update(x,y,z,,n,);
- }
- ans=;
- Query(,n,);
- printf("Case %d: The total value of the hook is %d.\n",o++,ans);
- }
- return ;
- }
HDU 1698 Just a Hook(线段树区间更新查询)的更多相关文章
- (简单) HDU 1698 Just a Hook , 线段树+区间更新。
Description: In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of ...
- HDU 1698 Just a Hook 线段树区间更新、
来谈谈自己对延迟标记(lazy标记)的理解吧. lazy标记的主要作用是尽可能的降低时间复杂度. 这样说吧. 如果你不用lazy标记,那么你对于一个区间更新的话是要对其所有的子区间都更新一次,但如果用 ...
- HDU 1698 Just a Hook(线段树 区间替换)
Just a Hook [题目链接]Just a Hook [题目类型]线段树 区间替换 &题解: 线段树 区间替换 和区间求和 模板题 只不过不需要查询 题里只问了全部区间的和,所以seg[ ...
- [HDU] 1698 Just a Hook [线段树区间替换]
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU 1698 Just a Hook(线段树区间替换)
题目地址:pid=1698">HDU 1698 区间替换裸题.相同利用lazy延迟标记数组,这里仅仅是当lazy下放的时候把以下的lazy也所有改成lazy就好了. 代码例如以下: # ...
- hdu - 1689 Just a Hook (线段树区间更新)
http://acm.hdu.edu.cn/showproblem.php?pid=1698 n个数初始每个数的价值为1,接下来有m个更新,每次x,y,z 把x,y区间的数的价值更新为z(1<= ...
- HDU.1689 Just a Hook (线段树 区间替换 区间总和)
HDU.1689 Just a Hook (线段树 区间替换 区间总和) 题意分析 一开始叶子节点均为1,操作为将[L,R]区间全部替换成C,求总区间[1,N]和 线段树维护区间和 . 建树的时候初始 ...
- HDU.1556 Color the ball (线段树 区间更新 单点查询)
HDU.1556 Color the ball (线段树 区间更新 单点查询) 题意分析 注意一下pushdown 和 pushup 模板类的题还真不能自己套啊,手写一遍才行 代码总览 #includ ...
- Just a Hook 线段树 区间更新
Just a Hook In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of t ...
随机推荐
- React Native,flexbox布局
Flexbox布局 flex:使组件在可利用的空间内动态地扩张或收缩.flex:1会使组件撑满空间.当有多个组件都指定了flex的值,那么谁的flex值大谁占得空间就大,占得大小的比例就是flex值的 ...
- numpy笔记
numpy数组切片 import numpy as np arr = np.empty((8, 3))for i in range(8): arr[i] == i arr[1,2] # 选取第1行第2 ...
- css 的pointer-events 属性
1.css 有好多属性,可以让你感觉到不可思议,关键是可以解决一些难以实现的问题,今天遇到一个,就是 point-enevts属性 支持 pointer-events 属性 的浏览器版本 2. 1 ...
- ubuntu 该软件包现在的状态极为不妥 error
rm -rf /var/lib/dpkg/info/yourerrorsofware* dpkg --remove --force-remove-reinstreq yourerrorsoftware ...
- 【370】Python列表生成式(for 写入一行)
参考: python用列表生成式写嵌套循环的方法_python_脚本之家 参考: python之列表生成式 - 旷野足迹 - 博客园 对于读取Twitter数据最终会得到一个超级复杂的json文件, ...
- Oracle数据库备份/导入工具
expdp和impdp常用于ORACLE数据库的导入导出. expdp导出数据库 1.root用户创建用于impdp/expdp导入导出的目录: # mkdir -p /home/dmpdata # ...
- 免費查看SQL PLAN的工具 - SQL Sentry Plan Explorer
今天 Terry大 介紹給小弟這個 SQL Sentry Plan Explorer 工具,可以用來看SQL Plan. 什麼? 用SSMS看不就很清楚了嗎? 這個Tool有把SQL Plan幫我們整 ...
- Spring容器中获取bean实例的方法
// 得到上下文环境 WebApplicationContext webContext = ContextLoader .getCurrentWebApplicationContext(); // 使 ...
- pandas数据操作
pandas数据操作 字符串方法 Series对象在其str属性中配备了一组字符串处理方法,可以很容易的应用到数组中的每个元素 t = pd.Series(['a_b_c_d','c_d_e',np. ...
- ASP.NET 分页+组合查询 练习
分页和组合查询都是通过拼接SQL语句到数据库查询进行实现 到汽车表(car)中查询 ,汽车表选取了“编号 code”,“车名 name”,“日期 time”,“油耗 oil ”,“马力 powers” ...