HDU 1698 Just a Hook 线段树 成段替换

来源:互联网 发布:正态分布 协方差矩阵 编辑:程序博客网 时间:2024/04/30 04:57

Just a Hook

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 15645    Accepted Submission(s): 7750


Problem Description
In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of the heroes. The hook is made up of several consecutive metallic sticks which are of the same length.



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
The input consists of several test cases. The first line of 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.
 

Output
For 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
11021 5 25 9 3
 

Sample Output
Case 1: The total value of the hook is 24.
 

Source
2008 “Sunline Cup” National Invitational Contest


传送门:HDU 1698 Just a Hook
题目大意:给你一个区间[1...n],每次替换[L,R]的值为c,问最后整个区间的和是多少。
题目分析:线段树的成段替换模型,照着写就好了。

代码如下:

#include <stdio.h>#include <string.h>#include <algorithm>using namespace std ;#define clear( A , X ) memset ( A , X , sizeof A )#define lson l , m , o << 1#define rson m + 1 , r , o << 1 | 1const int maxN = 1000000 ;int sum[ maxN ] , set [ maxN ] ;void PushUp ( int o ) {sum[ o ] = sum[ o << 1 ] + sum[ o << 1 | 1 ] ;}void PushDown ( int o , int c ) {if ( set[ o ] ) {set[ o << 1 ] = set[ o << 1 | 1 ] = set[ o ] ;sum[ o << 1 ] = set[ o << 1 ] * ( c - ( c >> 1 ) ) ;sum[ o << 1 | 1 ] = set[o << 1 | 1 ] * ( c >> 1 ) ;set[ o ] = 0 ;}}void Build ( int l , int r , int o ) {set[ o ] = 0;if ( l == r ) sum[ o ] = 1 ;else {int m = ( l + r ) >> 1 ;Build ( lson ) ;Build ( rson ) ;PushUp ( o ) ;}}void Update ( int L , int R , int c , int l , int r , int o ) {if ( L <= l && r <= R ) {set[ o ] = c ;sum[ o ] = c * ( r - l + 1 ) ;return ;}PushDown ( o , r - l + 1 ) ;int m = ( l + r ) >> 1 ;if ( L <= m ) Update ( L , R , c , lson ) ;if ( m < R ) Update ( L , R , c , rson ) ;PushUp ( o ) ;}int work () {int L , R , c , n , m ;scanf ( "%d%d" , &n , &m ) ;Build ( 1 , n , 1 ) ;for ( int i = 0 ; i < m ; ++ i ) {scanf ( "%d%d%d" , &L , &R , &c ) ;Update ( L , R , c , 1 , n , 1 ) ;}return sum[ 1 ] ;}int main () {int T , cas ;for ( scanf ( "%d" , &T ) , cas = 1 ; cas <= T ; ++ cas ) {printf ( "Case %d: The total value of the hook is %d.\n" , cas , work () ) ;}return 0 ;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 被贼偷了知道是谁没有证据怎么办 前任要去部队闹怎么办 站久了腿粗怎么办 机械表表带长了怎么办 恶魔之眼褪色了怎么办 恶魔之眼掉色后怎么办 练瑜伽出汗瑜伽垫手滑怎么办 cf多出来的神器怎么办 脖子痛得低不了怎么办 六岁的孩孑不吃.饭怎么办 大腿肌肉练废了怎么办 吃鸡里的信誉分太低怎么办she 血压高老是晕怎么办27 我腰疼的厉害怎么办 奥克斯空调外机上霜风扇不转怎么办 燃脂膏辣辣的怎么办 减肥期间暴食了怎么办 健身减脂后腹部皮松怎么办 吃减肥药上火怎么办呢 魔域怀旧版新区进不去怎么办 dnf十周年礼盒打开了怎么办 房地产项目完成后企业员工怎么办啊 韩服lol延迟太高怎么办 LOL等级奖励卡掉怎么办 魔域手机号换了怎么办 买的qq号找回了怎么办 买dnf账号被找回怎么办 微博账号已锁定怎么办 抖音账号封手机怎么办 手机号码绑定被别人占用了怎么办 DNF账号给找回了怎么办 转转上被骗了200怎么办 7彩账号被锁定怎么办 猪不吃食没精神怎么办 cf手游签到没给怎么办 cf说停止运行了怎么办 cf端游永久禁赛怎么办 cf端游爆破怕死怎么办 王者荣耀累计扣分12分怎么办 去医院看病没带身份证怎么办 ps4星战2鬼服怎么办