ACM: Just a Hook 解题报告 -线段树
Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
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.
Input
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.
Output
Sample Input
10
2
1 5 2
5 9 3
Sample Output
- #include"iostream"
- #include"algorithm"
- #include"cstdio"
- #include"cstring"
- #include"cmath"
- #define max(a,b) a>b?a:b
- #define min(a,b) a<b?a:b
- #define MX 100000+10000
- #define INF 0x3f3f3f3f
- #define lson l,m,rt<<1
- #define rson m+1,r,rt<<1|1
- using namespace std;
- int sum[MX<<],lazy[MX<<];
- int ll,n,a,b,val;
- void PushUp(int rt) {
- sum[rt]=sum[rt<<]+sum[rt<<|];
- }
- //这题的关键就在这个lazy数组的下沉,看了几遍别人的解题报告才写出来 。
- void PushDown(int rt,int m) {
- if(lazy[rt]!=INF) {
- lazy[rt<<]=lazy[rt<<|]=lazy[rt]; //lazy标记下移
- sum[rt<<]= (m-(m>>))*lazy[rt]; //对半下分
- sum[rt<<|]=(m>>)*lazy[rt];
- lazy[rt]=INF; //标记lazy为空
- }
- }
- void Build(int l,int r,int rt) {
- lazy[rt]=INF; //懒惰标记
- sum[rt]=; //每个节点标记为1;
- if(r==l) {
- return;
- }
- int m=(r+l)>>;
- Build(lson);
- Build(rson);
- PushUp(rt);
- }
- void UpData(int L,int R,int val,int l,int r,int rt) {
- if(r<=R&&L<=l) {
- lazy[rt]=val; //给lazy数组赋值
- sum[rt]=val*(r-l+);//因为数值是直接覆盖,所以直接用lazy的值乘以长度就是这个节点的值
- return ;
- }
- PushDown(rt,r-l+);
- int m=(r+l)>>;
- if(L<=m)UpData(L,R,val,lson);
- if(R>m) UpData(L,R,val,rson);
- PushUp(rt);
- }
- int main() {
- int T;
- while(~scanf("%d",&T))
- for(int qq=; qq<=T; qq++) {
- scanf("%d%d",&ll,&n);
- Build(,ll,);
- for(int i=; i<=n; i++) {
- scanf("%d%d%d",&a,&b,&val);
- UpData(a,b,val,,ll,);
- }
- printf("Case %d: The total value of the hook is %d.\n",qq,sum[]);
- }
- return ;
- }
ACM: Just a Hook 解题报告 -线段树的更多相关文章
- ACM Minimum Inversion Number 解题报告 -线段树
C - Minimum Inversion Number Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d &a ...
- ACM: 敌兵布阵 解题报告 -线段树
敌兵布阵 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description Li ...
- ACM: I Hate It 解题报告 - 线段树
I Hate It Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Des ...
- ACM: Billboard 解题报告-线段树
Billboard Time Limit:8000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descript ...
- ACM: Hotel 解题报告 - 线段树-区间合并
Hotel Time Limit:3000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu Description The ...
- [jzoj 5662] 尺树寸泓 解题报告 (线段树+中序遍历)
interlinkage: https://jzoj.net/senior/#contest/show/2703/1 description: solution: 发现$dfs$序不好维护 注意到这是 ...
- [P3097] [USACO13DEC] [BZOJ4094] 最优挤奶Optimal Milking 解题报告(线段树+DP)
题目链接:https://www.luogu.org/problemnew/show/P3097#sub 题目描述 Farmer John has recently purchased a new b ...
- ACM: A Simple Problem with Integers 解题报告-线段树
A Simple Problem with Integers Time Limit:5000MS Memory Limit:131072KB 64bit IO Format:%lld & %l ...
- [BZOJ1858] [SCOI2010] 序列操作 解题报告 (线段树)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1858 Description lxhgww最近收到了一个01序列,序列里面包含了n个数, ...
随机推荐
- CLR via C#(07)-静态类,分部类
一. 静态类-Static 静态类是一些不能实例化的类,它的作用是将一些相关的成员组合到一起,像我们常见的Math, Console等.静态类由static关键字标识,静态类成员也只能是st ...
- css控制文字显示长度,超过用省略号替代
.line_text { width:200px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } <span cl ...
- async/await 异步编程(转载)
转载地址:http://www.cnblogs.com/teroy/p/4015461.html 前言 最近在学习Web Api框架的时候接触到了async/await,这个特性是.NET 4.5引入 ...
- Pyqt 音视频播放器
在寻找如何使用Pyqt做一个播放器时首先找到的是openCV2 openCV2 貌似太强大了,各种关于图像处理的事情它都能完成,如 读取摄像头.图像识别.人脸识别. 图像灰度处理 . 播放视频等,强 ...
- struts标签<logic:iterate>的用法
<logic:iterate>主要用来处理在页面上输出集合类,集合一般来说是下列之一: 1. java对象的数组 2. ArrayList.Vector.HashMap等 具体用法请参考s ...
- 解决mysql无法插入中文数据及插入后显示乱码的问题
(1)废话不多说就是使用mysql数据库的时候无法输入中文,可以输入中文后显示的又是乱码!! (2开始解决问题: 第一步:找到安装mysql的目录找到 my.ini 文件: 第二步:使用记事本打开my ...
- Solr入门之(5)配置文件schema.xml
该配置文件中的标签:<fileTypes>.<fields>.<uniqueKey>.<copyField> fieldType说明 标签types中定 ...
- golang 索引
入门的基础路线 a Tour of GoEffective GoGo By Example 以上的三部分通读算是入门. 4个重要的组成部分 1. 基础知识2. 并发特性3. 异常处理4. 常用开源项目 ...
- PMP 第十章 项目沟通管理
1识别干系人 2规划沟通 3发布信息 4管理干系人期望 5报告绩效 1.沟通的维度有哪些?沟通技巧有哪些? 2.规划沟通管理的目的是什么?沟通渠道的计算(重点).影响沟通技术的因素有哪些?沟通模型的步 ...
- HR外包系统 - 薪资项目分类
序号 薪资项目编码规则 6到9开头1 普通工资项目加项 7开头三位,7XX,不够时,从71XX开始2 普通工资项目减项 8开头三位,8XX,不够时,从81XX开始3 ...