每个结点都是区间和
代码语言:javascript复制#include <bits/stdc .h>
#define lc (d<<1)
#define rc (d<<1|1)
#define m (l r>>1)
#define N 100005
using namespace std;
struct NODE{
int v,laz,l,r;
};
int n;
NODE node[4*N];
void pushUp(int d)
{
node[d].v=node[lc].v node[rc].v;
}
void build(int l,int r,int d)
{
node[d].laz=-1;
node[d].v=1;
if(l==r)
return;
build(l,m,lc);
build(m 1,r,rc);
pushUp(d);
}
void lazy(int d,int len)
{
if(node[d].laz!=-1)
{
int v=node[d].laz;
node[d].laz=-1;
node[lc].laz=v;
node[rc].laz=v;
node[lc].v=v*(len-(len>>1));
node[rc].v=v*(len>>1);
}
}
void updata(int l,int r,int L,int R,int d,int v)
{
if(L<=l&&r<=R)
{
node[d].laz=v;
node[d].v=v*(r-l 1);
return;
}
lazy(d,(r-l 1));
if(L<=m)
updata(l,m,L,R,lc,v);
if(R>m)
updata(m 1,r,L,R,rc,v);
pushUp(d);
}
int main()
{
int t,cnt=1;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
build(1,n,1);
int q;
scanf("%d",&q);
for(int i=0;i<q;i )
{
int l,r,v;
scanf("%d %d %d",&l,&r,&v);
updata(1,n,l,r,1,v);
}
printf("Case %d: The total value of the hook is %d.n",cnt ,node[1].v);
}
return 0;
}