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]);    }}