#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int a[maxn];
struct node{
int val;
int lazy;
}st[maxn<<2];
void pushup(int rt){
st[rt].val =st[rt<<1].val +st[rt<<1|1].val ;
}
void build(int l,int r,int rt){
st[rt].lazy =0;
if(l==r){
st[rt].val =a[l];
return;
}
int m=(l+r)>>1;
build(l,m,rt<<1);
build(m+1,r,rt<<1|1);
pushup(rt);
}
void pushdown(int rt,int ln,int rn){
if(st[rt].lazy ){
st[rt<<1].lazy =st[rt].lazy ;
st[rt<<1|1].lazy =st[rt].lazy ;
st[rt<<1].val =st[rt].lazy *ln;
st[rt<<1|1].val =st[rt].lazy *rn;
st[rt].lazy =0;
}
}
void update(int L,int R,int v,int l,int r,int rt){
if(L<=l&&r<=R){
st[rt].val =v*(r-l+1);
st[rt].lazy =v;
return;
}
int m=(l+r)>>1;
pushdown(rt,m-l+1,r-m);
if(L<=m) update(L,R,v,l,m,rt<<1);
if(R>m) update(L,R,v,m+1,r,rt<<1|1);
pushup(rt);
}
int query(int L,int R,int l,int r,int rt){
if(L<=l&&r<=R) return st[rt].val ;
if(L>r||R<l) return 0;
int m=(l+r)>>1;
pushdown(rt,m-l+1,r-m);
return query(L,R,l,m,rt<<1)+query(L,R,m+1,r,rt<<1|1);
}
int main()
{
int c,n,x,y,z,q;
scanf("%d",&c);
int cas=1;
while(c--){
scanf("%d",&n);
for(int i=1;i<=n;i++) a[i]=1;
build(1,n,1);
scanf("%d",&q);
for(int i=1;i<=q;i++){
scanf("%d%d%d",&x,&y,&z);
update(x,y,z,1,n,1);
}
printf("Case %d: The total value of the hook is %d.\n",cas++,query(1,n,1,n,1));
}
return 0;
}
hdu1698
最新推荐文章于 2022-10-01 15:30:10 发布