hdu1698
来源:互联网 发布:铜陵网络电视台 编辑:程序博客网 时间:2024/04/28 02:55
#include <iostream>#include <cstdio>using namespace std;#define lz 2*u,l,mid#define rz 2*u+1,mid+1,rconst int maxn = 100005;int flag[4*maxn];int sum[4*maxn];void build(int u, int l, int r){ flag[u] = 0; if(l == r) { sum[u] = 1; return ; } int mid = (l+r)>>1; build(lz); build(rz); sum[u] = sum[2*u] + sum[2*u+1];}void push_down(int u, int l, int r){ if(flag[u]) { flag[2*u] = flag[2*u+1] = flag[u]; int mid = (l+r)>>1; sum[2*u] = (mid-l+1)*flag[u]; sum[2*u+1] = (r-mid)*flag[u]; flag[u] = 0; }}void Update(int u, int l, int r, int tl, int tr, int val){ if(tl <= l && r <= tr) { sum[u] = (r-l+1)*val; flag[u] = val; return ; } push_down(u, l, r); int mid = (l+r)>>1; if(tr <= mid) Update(lz, tl, tr, val); else if(tl > mid) Update(rz, tl, tr, val); else { Update(lz, tl, mid, val); Update(rz, mid+1, tr, val); } sum[u] = sum[2*u] + sum[2*u+1];}int main(){ int T, tcase = 0; scanf("%d", &T); while(T--) { int n; scanf("%d", &n); build(1, 1, n); int t; scanf("%d", &t); while(t--) { int l, r, c; scanf("%d%d%d", &l, &r, &c); Update(1, 1, n, l, r, c); } printf("Case %d: The total value of the hook is %d.\n",++tcase,sum[1]); }}