zoukankan      html  css  js  c++  java
  • hdu-1698

    http://acm.hdu.edu.cn/showproblem.php?pid=1698

    题意:简单的线段树的区间更新和区间求和.

    AC代码:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ull;
    int dir[8][2]={{1,0},{0,1},{1,1},{1,-1},{-1,1},{-1,-1},{0,-1},{-1,0}};
    #define pi acos(-1)
    #define ls rt<<1
    #define rs rt<<1|1
    #define me0(s) memset(s,0,sizeof(s))
    #define me1(s) memset(s,1,sizeof(s))
    #define mef(s) memset(s,-1,sizeof(s))
    #define meinf(s) memset(s,inf,sizeof(s))
    #define llinf 1e18
    #define inf 1e9
    const int N=1e5+6;
    int t,n,q;
    int sum[N*4],lazy[N*4];
    void pushup(int rt){
        sum[rt]=sum[ls]+sum[rs];
    }
    void pushdown(int len,int rt){
        if(lazy[rt]){
            lazy[ls]=lazy[rt];
            lazy[rs]=lazy[rt];
            sum[ls]=lazy[rt]*(len-(len/2));
            sum[rs]=lazy[rt]*(len/2);
            lazy[rt]=0;
        }
    }
    void build(int l,int r,int rt){
        lazy[rt]=0;
        if(l==r){
            sum[rt]=1;
            return ;
        }
        int m=(l+r)/2;
        build(l,m,ls);
        build(m+1,r,rs);
        pushup(rt);
    }
    void update(int L,int R,int l,int r,int c,int rt){
        if(L<=l&&R>=r){
            lazy[rt]=c;
            sum[rt]=c*(r-l+1);
            return ;
        }
        pushdown(r-l+1,rt);
        int m=(l+r)/2;
        if(L<=m) update(L,R,l,m,c,ls);
        if(R>m) update(L,R,m+1,r,c,rs);
        pushup(rt);
    }
    int query(int L,int R,int l,int r,int rt){
        if(L<=l&&R>=r){
            return sum[rt];
        }
        pushdown(r-l+1,rt);
        int ans=0;
        int m=(l+r)/2;
        if(L<=m) ans+=query(L,R,l,m,ls);
        if(R>m) ans+=query(L,R,m+1,r,rs);
        return ans;
    }
    int main(int argc, char * argv[]){
           scanf("%d",&t);
           for(int i=1;i<=t;i++){
               scanf("%d%d",&n,&q);
               build(1,n,1);
               while(q--){
                   int x,y,z;
                   scanf("%d%d%d",&x,&y,&z);
                   update(x,y,1,n,z,1);
               }
               printf("Case %d: The total value of the hook is %d.
    ",i,query(1,n,1,n,1));
           }
        return 0;
    }
  • 相关阅读:
    axios解决调用后端接口跨域问题
    vuex的使用入门-官方用例
    vue使用axios实现前后端通信
    vue组件间通信用例
    vue-router的访问权限管理
    vue-router使用入门
    PHP 流程控制
    PHP 表达式和运算符
    PHP 预定义变量
    PHP 常量
  • 原文地址:https://www.cnblogs.com/wushengyang/p/11788686.html
Copyright © 2011-2022 走看看