(d) hdu1698 (区间修改)

Posted lsy263

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(d) hdu1698 (区间修改)相关的知识,希望对你有一定的参考价值。

(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 (区间修改)的主要内容,如果未能解决你的问题,请参考以下文章

Hdu 1698(线段树 区间修改 区间查询)

hdu-1698(线段树,区间修改)

HDU - 1698 Just a Hook(线段树区间整体修改值,查询区间和)

HDU - 1698 Just a Hook (线段树区间修改)

hdu1698 Just a Hook(线段树+区间修改+区间查询+模板)

hdu 1698 Just a Hook(线段树区间修改)