• HDU


    题目链接

    题意:

    区间修改,询问总和。

    思路:

    直接上线段树,裸题。

     1 /*
     2 *  Author: windystreet
     3 *  Date  : 2018-08-11 21:02:54
     4 *  Motto : Think twice, code once.
     5 */
     6 #include<bits/stdc++.h>
     7 
     8 using namespace std;
     9 
    10 #define X first
    11 #define Y second
    12 #define eps  1e-5
    13 #define gcd __gcd
    14 #define pb push_back
    15 #define PI acos(-1.0)
    16 #define lowbit(x) (x)&(-x)
    17 #define bug printf("!!!!!
    ");
    18 #define mem(x,y) memset(x,y,sizeof(x))
    19 
    20 typedef long long LL;
    21 typedef long double LD;
    22 typedef pair<int,int> pii;
    23 typedef unsigned long long uLL;
    24 
    25 const int maxn = 1e5+7;
    26 const int INF  = 1<<30;
    27 const int mod  = 1e9+7;
    28 
    29 struct Tree
    30 {
    31     int l,r,v,lazy;
    32 }tree[maxn<<2];
    33 
    34 void build(int rt,int l,int r){
    35     tree[rt].lazy = 0;tree[rt].l=l,tree[rt].r=r;
    36     if(l==r){
    37         tree[rt].v = 1;return;
    38     }
    39     int mid = (l+r)>>1;
    40     build(rt<<1,l,mid);
    41     build(rt<<1|1,mid+1,r);
    42     tree[rt].v = tree[rt<<1].v + tree[rt<<1|1].v;
    43 }
    44 void pushup(int rt){
    45     tree[rt].v = tree[rt<<1].v+tree[rt<<1|1].v;
    46 }
    47 void pushdown(int rt){
    48     if(tree[rt].lazy){
    49         int mid = (tree[rt].l+tree[rt].r)>>1;
    50         tree[rt<<1].lazy = tree[rt<<1|1].lazy = tree[rt].lazy;
    51         tree[rt<<1].v = (mid - tree[rt].l + 1)*tree[rt].lazy;
    52         tree[rt<<1|1].v = (tree[rt].r - mid )*tree[rt].lazy;
    53         tree[rt].lazy = 0;
    54     }
    55 }
    56 void update(int rt,int L, int R,int l, int r,int v){
    57     if(l<=L&&R<=r){
    58         tree[rt].lazy = v;
    59         tree[rt].v = v*(R-L+1);
    60         return;
    61     }
    62     pushdown(rt);                              // 每次修改之前先将标记下推
    63     int mid = (L + R) >>1;
    64     if(l<=mid) update(rt<<1,L,mid,l,r,v);
    65     if(r>mid) update(rt<<1|1,mid+1,R,l,r,v);
    66     pushup(rt);                                // 向上更新
    67 }
    68 
    69 
    70 void solve(){
    71     int n,m,x,y,v;
    72     scanf("%d%d",&n,&m);
    73     build(1,1,n);
    74     while(m--){
    75         scanf("%d%d%d",&x,&y,&v);
    76         update(1,1,n,x,y,v);
    77     }
    78     printf("%d.
    ",tree[1].v);
    79     return;
    80 }
    81 
    82 int main()
    83 {
    84 //    freopen("F:\in.txt","r",stdin);
    85 //    freopen("out.txt","w",stdout);
    86 //    ios::sync_with_stdio(false);
    87     int t = 1,cas = 1;
    88     scanf("%d",&t);
    89     while(t--){
    90         printf("Case %d: The total value of the hook is ",cas++);
    91         solve();
    92     }
    93     return 0;
    94 }
  • 相关阅读:
    dart中Map类型详解
    洛谷P1582 倒水(二进制)
    maven依赖 临时转阿里云镜像
    java jdbc 连接数据库
    java 常用类
    java 异常处理
    java 对象 this static 封装
    java 面对对象 内存分析
    团队开发 git
    java 代码块
  • 原文地址:https://www.cnblogs.com/windystreet/p/9476949.html
Copyright © 2020-2023  润新知