zoukankan      html  css  js  c++  java
  • HDU 1698.Just a Hook-线段树(成段替换、输出总和tree[1])

    HDU1698.Just a Hook

    这个题是最最基础的成段更新的线段数的题目,直接贴代码吧。

    代码:

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<cmath>
     5 #include<algorithm>
     6 #include<cstdlib>
     7 #include<queue>
     8 #include<stack>
     9 #include<map>
    10 using namespace std;
    11 typedef long long ll;
    12 const int maxn=1e5+10;
    13 const int inf=0x3f3f3f3f;
    14 const double eps=1e-5;
    15 #define lson l,m,rt<<1
    16 #define rson m+1,r,rt<<1|1
    17 int tree[maxn<<2],add[maxn<<2];
    18 void pushup(int rt)
    19 {
    20     tree[rt]=tree[rt<<1]+tree[rt<<1|1];
    21 }
    22 void pushdown(int rt,int m)
    23 {
    24     if(add[rt]){
    25         add[rt<<1]=add[rt<<1|1]=add[rt];
    26         tree[rt<<1]=(m-(m>>1))*add[rt];
    27         tree[rt<<1|1]=(m>>1)*add[rt];
    28         add[rt]=0;
    29     }
    30 }
    31 void build(int l,int r,int rt)
    32 {
    33     add[rt]=0;
    34     tree[rt]=1;
    35     if(l==r){
    36         return ;
    37     }
    38 
    39     int m=(l+r)>>1;
    40     build(lson);
    41     build(rson);
    42     pushup(rt);
    43 }
    44 void update(int L,int R,int c,int l,int r,int rt)
    45 {
    46     if(L<=l&&r<=R){
    47         add[rt]=c;
    48         tree[rt]=c*(r-l+1);
    49         return ;
    50     }
    51 
    52     pushdown(rt,r-l+1);
    53     int m=(l+r)>>1;
    54     if(L<=m) update(L,R,c,lson);
    55     if(R> m) update(L,R,c,rson);
    56     pushup(rt);
    57 }
    58 int main()
    59 {
    60     int t,n,m;
    61     while(~scanf("%d",&t)){
    62         int cas=0;
    63         while(t--){
    64             cas++;
    65             scanf("%d%d",&n,&m);
    66             build(1,n,1);
    67             for(int i=1;i<=m;i++){
    68                 int l,r,c;
    69                 scanf("%d%d%d",&l,&r,&c);
    70                 update(l,r,c,1,n,1);
    71             }
    72             printf("Case %d: The total value of the hook is %d.
    ",cas,tree[1]);
    73         }
    74     }
    75     return 0;
    76 }
  • 相关阅读:
    函数防抖与函数节流 封装好的debounce和throttle函数
    机顶盒
    getchar() putchar()
    【整】char、varchar、nchar、nvarchar的区别
    主机名
    主机
    java中的匿名内部类总结
    智能路由器又多一个玩家——乐视TV
    乐视开始折腾路由器,小米与极路由还会好过吗?
    带你认识什么是路由器
  • 原文地址:https://www.cnblogs.com/ZERO-/p/9729186.html
Copyright © 2011-2022 走看看