zoukankan      html  css  js  c++  java
  • BZOJ 1651 专用牛棚

    线段树区间加1,求一次全局最大值,开好内存,炸过去。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define maxv 4000500
    #define maxn 100050
    using namespace std;
    int n,a[maxn],b[maxn],ls[maxv],rs[maxv],lazy[maxv],val[maxv],cnt=0,tot=0,root;
    void build(int &now,int left,int right)
    {
        now=++tot;
        if (left==right) return;
        int mid=(left+right)>>1;
        build(ls[now],left,mid);
        build(rs[now],mid+1,right); 
    }
    void pushdown(int now)
    {
        if (lazy[now]>0)
        {
            lazy[ls[now]]+=lazy[now];lazy[rs[now]]+=lazy[now];
            val[ls[now]]+=lazy[now];val[rs[now]]+=lazy[now];
            lazy[now]=0;
        }
    }
    void pushup(int now)
    {
        val[now]=max(val[ls[now]],val[rs[now]]);
    }
    void update(int now,int left,int right,int l,int r)
    {
        pushdown(now);
        if ((left==l) && (right==r))
        {
            lazy[now]++;val[now]++;
            return;    
        }
        int mid=(left+right)>>1;
        if (r<=mid) update(ls[now],left,mid,l,r);
        else if (l>=mid+1) update(rs[now],mid+1,right,l,r);
        else
        {
            update(ls[now],left,mid,l,mid);
            update(rs[now],mid+1,right,mid+1,r);
        }
        pushup(now);
    }
    int main()
    {
        scanf("%d",&n);
        for (int i=1;i<=n;i++)
        {
            scanf("%d%d",&a[i],&b[i]);
            cnt=max(cnt,b[i]);
        }
        build(root,1,cnt);
        for (int i=1;i<=n;i++)
            update(1,1,cnt,a[i],b[i]);
        printf("%d
    ",val[root]);
        return 0;
    }
  • 相关阅读:
    自定义CopyOnWriteHashMap
    NIO中Buffer缓冲区的实现
    TOMCAT原理详解及请求过程
    XSS的原理分析与解剖
    mysql分页查询优化
    java如何正确停止一个线程
    Centos搭建ElasticSearch
    redis集群原理
    Idea-每次修改JS文件都需要重启Idea才能生效解决方法
    java 加密 解密 Illegal key size
  • 原文地址:https://www.cnblogs.com/ziliuziliu/p/5447342.html
Copyright © 2011-2022 走看看