#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
#define ll long long
#define FOR( i , a , b ) for ( int i = a ; i <= b ; ++ i )
#define Mid ((l+r)>>1)
#define lson rt<<1,l,Mid
#define rson rt<<1|1,Mid+1,r
const int maxn = 100010;
int sum[maxn<<2],add[maxn<<2];
void build(int rt,int l,int r){
add[rt] = 0;
if(l == r)
sum[rt] = 1;
else{
build(lson);
build(rson);
sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}
}
void pushDown(int rt,int len){
add[rt<<1] = add[rt<<1|1] = add[rt];
sum[rt<<1] = (len-(len>>1))*add[rt];
sum[rt<<1|1] = (len>>1)*add[rt];
add[rt] = 0;
}
void update(int rt,int l,int r,int L,int R,int z){
if(L <= l && r <= R){
add[rt] = z;
sum[rt] = (r-l+1)*z;
}else{
if(add[rt])
pushDown(rt,r-l+1);
if(L <= Mid)
update(lson,L,R,z);
if(R > Mid)
update(rson,L,R,z);
sum[rt] = sum[rt<<1] + sum[rt<<1|1];
}
}
int main(){
int t,n,q,x,y,z;
int cnt=1;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&q);
build(1,1,n);
while(q--){
scanf("%d%d%d",&x,&y,&z);
update(1,1,n,x,y,z);
}
printf("Case %d: The total value of the hook is %d.\n", cnt++,sum[1]);
}
return 0;
}
HDU1698 Just a Hook--線段樹LAZY操作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.