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
  • 相关阅读:
    PHP5中PDO的简单使用
    Apache中设置默认首页的方法
    PHP数组读取的循环操作
    header("Location:login.php")应该注意的几个问题
    纯JavaScript实现弹出选择第几个单选按钮
    PHP关于错误抑制符@的使用
    CSS盒子模型
    Appache中的ServerAlias
    PHP move_uploaded_file() 函数 定义和用法
    PHP ob_start() 函数介绍
  • 原文地址:https://www.cnblogs.com/-maybe/p/4361068.html
Copyright © 2011-2022 走看看