HDU-1698-Just A Hook (线段树区间修改,区间查询)

来源:互联网 发布:python 前端 编辑:程序博客网 时间:2024/06/02 05:30
#include<cstdio>#include<algorithm>using namespace std;typedef long long ll;const int maxn=1e5+7;int a[maxn<<2];void push_down(int now){    if(!a[now]) return ;    a[now<<1]=a[now<<1|1]=a[now];    a[now]=0;}void update(int now,int l,int r,int ul,int ur,int c){    if(ul<=l&&ur>=r)    {        a[now]=c;        return ;    }    int mid=(l+r)>>1;    push_down(now);    if(ul<=mid) update(now<<1,l,mid,ul,ur,c);    if(ur>mid) update(now<<1|1,mid+1,r,ul,ur,c);}int get_sum(int now,int l,int r){    if(a[now]) return a[now]*(r-l+1);    int mid=(l+r)>>1;    return get_sum(now<<1,l,mid)+get_sum(now<<1|1,mid+1,r);}int main(){    int T,kase=1,n,m,l,r,c;    scanf("%d",&T);    while(T--)    {        scanf("%d%d",&n,&m);        a[1]=1;        for(int i=0;i<m;i++)        {            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",kase++,get_sum(1,1,n));    }    return 0;}

0 0