给维护区间值懒标记
需有上传维护和下放
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
const int mod = 998244353;
//#define int long long
typedef long long ll;
#define endl '\n'
#define color(x) t[x].color
#define ls(x) (x<<1)
#define rs(x) (x<<1|1)
struct SegmentTree {
int color;
}t[N<<2];
void push_up(int p) {
if(color(ls(p)) == color(rs(p)) && color(ls(p)) != -1) color(p) = color(ls(p));
else color(p) = -1;
}
void push_down(int p) {
if(color(p) != -1) color(ls(p)) = color(rs(p)) = color(p);
}
void build(int p,int l,int r) {
color(p) = 0;
if(l == r) return ;
int mid = (l + r) >> 1;
build(ls(p),l,mid); build(rs(p),mid+1,r);
}
void update(int p,int l,int r,int ql,int qr,int v) {
if(ql <= l && qr >= r) {
color(p) = v;
return ;
}
push_down(p);
int mid = (l + r) >> 1;
if(ql <= mid) update(ls(p),l,mid,ql,qr,v);
if(qr > mid) update(rs(p),mid+1,r,ql,qr,v);
push_up(p);
}
int query(int p,int l,int r,int ql,int qr) {
if(color(p) != -1) return color(p) * (r - l + 1);
push_down(p);
int mid = (l + r) >> 1;
int res = 0;
if(ql <= mid) res += query(ls(p),l,mid,ql,qr);
if(qr > mid) res += query(rs(p),mid+1,r,ql,qr);
return res;
}
signed main(){
IOS
#ifdef ddgo
freopen("C:\\Users\\asus\\Desktop\\ddgoin.txt","r",stdin);
#endif
int tt; cin>>tt;
for(int kase=1;kase<=tt;kase++) {
int n,m; cin>>n>>m;
for(int i=1;i<=(n<<2);i++) color(i) = 1;
// build(1,1,n);
for(int i=1;i<=m;i++) {
int l,r,v; cin>>l>>r>>v;
update(1,1,n,l,r,v);
}
cout<<"Case "<<kase<<": The total value of the hook is "<<query(1,1,n,1,n)<<"."<<endl;
}
return 0;
}