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

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

    普通的线段树区间更新,用线段树去输出值,注意输出格式就好了.

    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 n,q,fl;
    int sum[N*4],a[N*4],lazy[N*4];
    void pushdown(int rt){
        if(lazy[rt]){
            lazy[ls]+=lazy[rt];
            lazy[rs]+=lazy[rt];
            sum[ls]+=lazy[rt];
            sum[rs]+=lazy[rt];
            lazy[rt]=0;
        }
    }
    void update(int L,int R,int l,int r,int rt){
        if(L<=l&&R>=r){
            sum[rt]+=(r-l+1);
            lazy[rt]+=1;
            return ;
        }
        pushdown(rt);
        int m=(l+r)/2;
        if(L<=m) update(L,R,l,m,ls);
        if(R>m) update(L,R,m+1,r,rs);
    }
    int query(int l,int r,int p,int rt){//L,R查询的区间,l,r总区间
        if(l==r){
            return sum[rt];
        }
        int ans=0;
        int m=(l+r)/2;
        if(p<=m) ans+=query(l,m,p,ls);
        if(p>m) ans+=query(m+1,r,p,rs);
        return ans;
    }
    void printf(int l,int r,int rt){
        if(l==r){
            if(fl++>0) printf(" ");
            printf("%d",sum[rt]);
            return ;
        }
        int m=(l+r)>>1;
        pushdown(rt);
        printf(l,m,ls);
        printf(m+1,r,rs);
    }
    int main(int argc, char * argv[]){
        ios::sync_with_stdio(false);
        while(scanf("%d",&n)!=EOF&&n!=0){
            fl=0;
            me0(sum);
            me0(lazy);
            int t=n;
            while(t--){
                int l,r;
                scanf("%d%d",&l,&r);
                update(l,r,1,n,1);
            }
            printf(1,n,1);
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    柱状图最大的矩形
    单词搜索
    最小覆盖子串
    颜色分类
    编辑距离
    X的平方根
    二进制求和
    最大子序和
    N皇后
    java8-14-时间API
  • 原文地址:https://www.cnblogs.com/wushengyang/p/11767746.html
Copyright © 2011-2022 走看看