zoukankan      html  css  js  c++  java
  • HDU 4107(线段树 特殊懒惰标记)g++ TLE,c++才过(呜呜呜呜)

    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #define tree int o,int l,int r
    #define lson o<<1,l,mid
    #define rson o<<1|1,mid+1,r
    #define lo o<<1
    #define ro o<<1|1
    #define inf 2e9
    #define eps 1e-7
    #define N 200009
    using namespace std;
    int m,n,T,t,q,p;
    int ql,qr,c;
    int minx[N<<2],lazy[N<<2],val[N<<2];
    void build(tree)
    {
        minx[o]=p;
        lazy[o]=0;
        if(l<r)
        {
            int mid=(l+r)>>1;
            build(lson);
            build(rson);
        }
    }
    void init()
    {
        memset(val,0,sizeof(val[0])*(n+1));
        memset(lazy,0,sizeof(lazy));
        build(1,1,n);
        return ;
    }
    void pushup(int o)
    {
        minx[o]=min(minx[lo],minx[ro]);
    }
    void pushdown(int o)
    {
        if(lazy[o])
        {
            lazy[lo]+=lazy[o];
            lazy[ro]+=lazy[o];
            minx[lo]-=lazy[o];//修改子节点的所有信息,WA
            minx[ro]-=lazy[o];
    
            lazy[o]=0;
        }
    }
    void update(tree)
    {
        if(l==r)
        {
            if(val[l]>=p)
                val[l]+=(c+lazy[o])*2;
            else
                val[l]+=c+lazy[o];
    
            lazy[o]=0;
            minx[o]=p-val[l];//WA
            if(minx[o]<=0)
                minx[o]=inf;
        }
        else
        {
            int mid=(l+r)>>1;
            if(ql<=l&&qr>=r)
            {
                if(minx[o]<=c)
                {
                    pushdown(o);
                    if(ql<=mid)update(lson);
                    if(qr>mid)update(rson);
                    pushup(o);
                }
                else
                {
                    minx[o]-=c;
                    lazy[o]+=c;
                }
            }
            else
            {
                pushdown(o);
                if(ql<=mid)update(lson);
                if(qr>mid)update(rson);
                pushup(o);
            }
        }
    }
    void query(tree)
    {
        if(l==r)
        {
            if(val[l]>=p)
                val[l]+=(lazy[o])*2;
            else
                val[l]+=lazy[o];
            printf("%d%c",val[l],l==n?'
    ':' ');
        }
        else
        {
            pushdown(o);
            int mid=(l+r)>>1;
            query(lson);
            query(rson);
    //        pushup(o);
        }
    }
    int main()
    {
    #ifndef ONLINE_JUDGE
        freopen("ex.in","r",stdin);
    #endif
        while(scanf("%d%d%d",&n,&q,&p)==3)
        {
            init();
            while(q--)
            {
                scanf("%d%d%d",&ql,&qr,&c);
                update(1,1,n);
            }
            query(1,1,n);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    [zt]【外刊IT评论网】我是如何教我5岁的女儿学编程的
    Three Lines (USACO 2012 US Open, Bronze Division Problem 2)
    my domain
    JQueryDialog(弹出窗口,遮蔽窗口)
    煲耳机
    去掉桌面图标阴影
    RSS有什么用?RSS是什么?
    采用交换机和HUB连接局域网有什么区别?
    电脑经常自动重启的原因
    使用hub(集线器)连接局域网实现文件共享
  • 原文地址:https://www.cnblogs.com/sbaof/p/3369645.html
Copyright © 2011-2022 走看看