码迷,mamicode.com
首页 > 其他好文 > 详细

(d) hdu1698 (区间修改)

时间:2019-07-22 20:05:50      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:mes   namespace   std   cst   style   ace   case   logs   The   

(d) hdu1698 Just a Hook

如在阅读本文时遇到不懂的部分,请在评论区询问,或跳转 线段树总介绍

 

注意一开始整个区间都是1

此题过水不予讲解

 

代码

/*hdu1698*/
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
const int N=2e7+3;
int T,n,m;
int tag[N<<2],v[N<<2];
#define mid (l+r>>1)
#define ls (rt<<1)
#define rs (ls|1)
#define pushup(rt) v[rt]=v[ls]+v[rs]
void build(int rt,int l,int r){
    tag[rt]=0;
    if(l==r){v[rt]=1;return;}
    build(ls,l,mid);build(rs,mid+1,r);
    pushup(rt);
}
void pushdown(int rt,int l,int r){
    tag[ls]=tag[rt],tag[rs]=tag[rt];
    v[ls]=(mid-l+1)*tag[rt];
    v[rs]=(r-mid)*tag[rt];
    tag[rt]=0;
}
void update(int rt,int l,int r,int x,int y,int z){
    if(x<=l&&y>=r){tag[rt]=z;v[rt]=(r-l+1)*z;return;}
    if(tag[rt])pushdown(rt,l,r);
    if(x<=mid)update(ls,l,mid,x,y,z);
    if(y>mid)update(rs,mid+1,r,x,y,z);
    pushup(rt);
}
int Case=0;
int main(){
    scanf("%d",&T);
    while(T--){
        scanf("%d%d",&n,&m);
        //build(1,1,n);
        update(1,1,n,1,n,1);
        int x,y,z;
        while(m--){
            scanf("%d%d%d",&x,&y,&z);
            update(1,1,n,x,y,z);
        }
        printf("Case %d: The total value of the hook is %d.\n",++Case,v[1]);   
    }
    return 0;
}

 End

(d) hdu1698 (区间修改)

标签:mes   namespace   std   cst   style   ace   case   logs   The   

原文地址:https://www.cnblogs.com/lsy263/p/11227976.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!