hdu~1698~线段树

来源:互联网 发布:淘宝二手相机靠谱吗 编辑:程序博客网 时间:2024/05/20 10:51

成段更新基础题,加一个lazy数组。


ACcode:

#include<stdio.h>#include<iostream>using namespace std;const int size=100000;int n,m;int sum[size<<2],col[size<<2];void pushup(int rt){     sum[rt]=sum[rt<<1]+sum[rt<<1|1];   }void pushdown(int rt,int k){     if (col[rt])     {        col[rt<<1]=col[rt<<1|1]=col[rt];         sum[rt<<1]=(k-(k>>1))*col[rt];         sum[rt<<1|1]=(k>>1)*col[rt];        col[rt]=0;                }}void build (int rt,int l,int r){     sum[rt]=1,col[rt]=0;       if (l==r) return ;     int mid=(l+r)>>1;     build(rt<<1,l,mid);     build(rt<<1|1,mid+1,r);     pushup(rt);   }void update(int rt,int l,int r,int L,int R,int v){      if (L<=l&&r<=R)      {        col[rt]=v;        sum[rt]=v*(r-l+1);        return ;     }     pushdown(rt,r-l+1);     int mid=(l+r)>>1;     if (L<=mid) update(rt<<1,l,mid,L,R,v);     if (R>mid)  update(rt<<1|1,mid+1,r,L,R,v);     pushup(rt);}int main(){    int a,b,v,cas,t=1;    for (scanf("%d",&cas);t<=cas;t++)    {        scanf("%d %d",&n,&m);        build (1,1,n);        while (m--)        {              scanf("%d %d %d",&a,&b,&v);               update(1,1,n,a,b,v);         }        printf("Case %d: The total value of the hook is %d.\n",t,sum[1]);    }    return 0;   }


原创粉丝点击