long long cnt=1;
long long sum[maxn*150],lazy[maxn*150],Lnode[maxn*150],Rnode[maxn*150];
void PushUp(long long rt){sum[rt]=sum[Lnode[rt]]+sum[Rnode[rt]];}
void PushDown(long long rt,long long ln,long long rn){
if(lazy[rt]){//1非工作人,2工作日
lazy[Lnode[rt]]+=lazy[rt];sum[Lnode[rt]]+=lazy[rt]*ln;
lazy[Rnode[rt]]+=lazy[rt];sum[Rnode[rt]]+=lazy[rt]*rn;
lazy[rt]=0;
}
}
void Update(long long L,long long R,long long C,long long l,long long r,long long rt){
if(L<=l&&r<=R) {
sum[rt] += C*(r-l+1);
lazy[rt] += C;
return;
}
long long m=(l+r)>>1;
if(!Lnode[rt])Lnode[rt]=++cnt;
if(!Rnode[rt])Rnode[rt]=++cnt;
PushDown(rt,m-l+1,r-m);
if(L <= m)Update(L,R,C,l,m,Lnode[rt]);
if(R > m)Update(L,R,C,m+1,r,Rnode[rt]);
PushUp(rt);
}
long long Query(long long L,long long R,long long l,long long r,long long rt){
if(L<=l&&r<=R){
return sum[rt];
}
long long m=(l+r)>>1;
long long ANS=0;
PushDown(rt,m-l+1,r-m);
if(L <= m)ANS+=Query(L,R,l,m,Lnode[rt]);
if(R > m )ANS+=Query(L,R,m+1,r,Rnode[rt]);
return ANS;
}