• HDU 1698 Just a Hook 线段树 区间修改


    题意:

    一个区间编号为1到n,刚开始每个单位的值都为1,然后给出q个操作:u,v,w,把区间[u,v]的单位的值修改为w,问这q个操作后,总区间的值的和。

    注意,这道题在输出的时候,我在最后忘了一个 ".",然后就wa了一次。

    这个线段树有3个函数,pushup,pushdown,update,(build,query这道题可以省略)。

    pushup:更新父亲节点的信息。

    pushdown:把父亲节点的信息传递给子节点。

    update:更新区间信息。

     1 #include<cstdio>
     2 #define lson l,m,rt<<1
     3 #define rson m+1,r,rt<<1|1
     4 const int maxn=100000+10;
     5 int setv[maxn<<2];
     6 int sum[maxn<<2];
     7 void pushup(int rt)
     8 {
     9     sum[rt]=sum[rt<<1]+sum[rt<<1|1];
    10 }
    11 void pushdown(int rt,int len)
    12 {
    13     if(setv[rt]>0){
    14         setv[rt<<1]=setv[rt<<1|1]=setv[rt];
    15         sum[rt<<1]=setv[rt<<1]*(len-(len>>1));
    16         sum[rt<<1|1]=setv[rt<<1|1]*(len>>1);
    17         setv[rt]=0;
    18     }
    19 }
    20 void update(int L,int R,int p,int l,int r,int rt)
    21 {
    22     if(L<=l&&R>=r){
    23         setv[rt]=p;
    24         sum[rt]=p*(r-l+1);
    25         return ;
    26     }
    27     pushdown(rt,r-l+1);
    28     int m=(l+r)>>1;
    29     if(L<=m)
    30         update(L,R,p,lson);
    31     if(R>m)
    32         update(L,R,p,rson);
    33     pushup(rt);
    34 }
    35 int main()
    36 {
    37     int test;
    38     int cas=0;
    39     scanf("%d",&test);
    40     while(test--){
    41         cas++;
    42         int n,q;
    43         scanf("%d",&n);
    44         scanf("%d",&q);
    45         setv[1]=1;
    46         sum[1]=n;
    47         int u,v,w;
    48         for(int i=0;i<q;i++){
    49             scanf("%d%d%d",&u,&v,&w);
    50             update(u,v,w,1,n,1);
    51         }
    52         printf("Case %d: The total value of the hook is %d.
    ",cas,sum[1]);
    53     }
    54     return 0;
    55 }
    View Code
  • 相关阅读:
    C语言变量名的命名规则
    C++中关于文字编码的问题
    位运算
    Dictionary C#
    C# 中List 用法
    pDC,双缓冲 加载bitmap一点实践
    MyEclipse开发调试JSP,Servlet,JavaBean,JSF,Structs etc
    sqlserver 2005 一些操作
    利用System.EventHandler来实现两个窗体间的事件调用
    webconfig
  • 原文地址:https://www.cnblogs.com/-maybe/p/4361068.html
Copyright © 2020-2023  润新知