zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Java实现 LeetCode 394 字符串解码
    Java实现 LeetCode 394 字符串解码
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 390 消除游戏
    Java实现 LeetCode 390 消除游戏
  • 原文地址:https://www.cnblogs.com/-maybe/p/4361068.html
Copyright © 2011-2022 走看看