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个数, ...
 
随机推荐
- VS2012/2013 停止调试后,无法刷新页面
 - 【翻译十九】-java之执行器
			
Executors In all of the previous examples, there's a close connection between the task being done by ...
 - Solr入门之(3)常用概念说明(持续补充):
			
由于solr底层使用lucene,所以很多概念与lucene相同,下面是几个常用的概念: * Document:一个要进行索引的单元,相当于数据库的一行纪录,任何想要被索引的数据,都必须转化为Docu ...
 - 百度编辑器UEditor ASP.NET示例Demo                                                    分类:            ASP.NET             2015-01-12 11:18    346人阅读    评论(0)    收藏
			
在百度编辑器示例代码基础上进行了修改,封装成类库,只需简单配置即可使用. 完整demo下载 版权声明:本文为博主原创文章,未经博主允许不得转载.
 - hdu 4731 2013成都赛区网络赛 找规律
			
题意:找字串中最长回文串的最小值的串 m=2的时候暴力打表找规律,打表可以用二进制枚举
 - [QCon] Scrum阅读随想
			
最近从群里面下载到几篇文章,看到QCon出来的相关文章,觉得都写的很不错,都是一些个大公司的非常好的方法 QCon:是为团队领导者.架构师.项目经理和高级软件开发人员量身打造的企业软件开发大会,其 ...
 - 用Feature的方式删除SharePoint2010的Page中重复的WebPart
			
用Feature的方式删除SharePoint2010的Page中重复的WebPart. 代码如下所示: public class SupportCenterDuplicatedWebpartRemo ...
 - Codeforces Round #143 (Div. 2) E. Cactus 无向图缩环+LCA
			
E. Cactus A connected undirected graph is called a vertex cactus, if each vertex of this graph bel ...
 - 非正规写法获取不到tr,td
			
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
 - flex_高度补全
			
一个高度为100px, 另外一个高度自动补全当前界面下剩余的高度: <!DOCTYPE html> <html lang="en"> <head> ...