//不懂得可以私信我,我也是菜鸟啊,可以一起讨论啊!!!
#include <iostream> #include <cstdio> #include <cstring> using namespace std; #define MAX 100005 int sum; struct node { int left; int right; int value; }; node tree[4*MAX]; void Build_tree(int p,int l,int r) { tree[p].left=l; tree[p].right=r; tree[p].value=-1; if(l==r) { tree[p].value=1; return ; } int mid=(l+r)/2; Build_tree(p*2,l,mid); Build_tree(p*2+1,mid+1,r); } void Update(int p,int l,int r,int v) { if(l<=tree[p].left&&tree[p].right<=r) { tree[p].value=v; return ; } if(tree[p].value!=-1) { tree[p*2].value=tree[p*2+1].value=tree[p].value; tree[p].value=-1; } int mid=(tree[p].left+tree[p].right)/2; if(l>mid) Update(p*2+1,l,r,v); else if(r<=mid) Update(p*2,l,r,v); else { Update(p*2,l,mid,v); Update(p*2+1,mid+1,r,v); } } void Query(int p) { if(tree[p].value!=-1) { sum=sum+tree[p].value*(tree[p].right-tree[p].left+1); return ; } Query(p*2); Query(p*2+1); } int main() { int T,n,m,i,j,l,r,v,p=1; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); sum=0; Build_tree(1,1,n); for(i=0;i<m;i++) { scanf("%d%d%d",&l,&r,&v); Update(1,l,r,v); } Query(1); printf("Case %d: The total value of the hook is %d.\n",p++,sum); } return 0; }