color标记待更新,更新完标记为0;
#include<cstdio>
#define M 100005
#define mid (l+r)>>1
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
int color[M<<2],sum[M<<2];
void PushPlus(int rt){
sum[rt] = sum[rt<<1] + sum[rt<<1|1];
}
void PushSub(int rt,int m){
if(color[rt]){
color[rt<<1] = color[rt<<1|1] = color[rt];
sum[rt<<1|1] = (m>>1 ) *color[rt];
sum[rt<<1] = ( m - (m>>1) ) *color[rt];
color[rt] = 0;
}
}
void Bulid(int l,int r,int rt){
color[rt] = 0;
if(l == r){
sum[rt] = 1;
return ;
}
int m = mid;
Bulid(lson);
Bulid(rson);
PushPlus(rt);
}
void Updata(int x,int L,int R,int l,int r,int rt){
if( L <= l && r <= R ){
sum[rt] = (r-l+1)*x;
color[rt] = x;
return ;
}
PushSub(rt,r-l+1);
int m = mid ;
if(L <= m)
Updata(x,L,R,lson);
if(R > m)
Updata(x,L,R,rson);
PushPlus(rt);
}
int main(){
int cas,a,b,c,n,m;
scanf("%d",&cas);
for(int i=1;i<=cas;i++){
scanf("%d %d",&n,&m);
Bulid(1,n,1);
while(m--){
scanf("%d %d %d",&a,&b,&c);
Updata(c,a,b,1,n,1);
}
printf("Case %d: The total value of the hook is %d.\n",i,sum[1]);
}
return 0;
}