题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1513

题意:三维空间,有一些立方体在垂直下落。立方体的左下角坐标(x,y)以及长宽高d,s,w。A落在B上时将停止下落(即使A只有一小块跟B重合就算A会落在B上)。求最后最大的高度。

思路:每次覆盖时找到区域最大值,加上当前立方体的高度。

int xL,xR,yL,yR;
int h;

int n,m;

struct Seg
{
    int f[N<<1],s[N<<1];

    void insert(int t,int L,int R,int ll,int rr,int h)
    {
        f[t]=max(f[t],h);
        if(L==ll&&R==rr)
        {
            s[t]=max(s[t],h);
            return;
        }
        int M=(L+R)>>1;
        if(rr<=M) insert(t<<1,L,M,ll,rr,h);
        else if(ll>M) insert(t<<1|1,M+1,R,ll,rr,h);
        else
        {
            insert(t<<1,L,M,ll,M,h);
            insert(t<<1|1,M+1,R,M+1,rr,h);
        }
    }

    int query(int t,int L,int R,int ll,int rr)
    {
        if(L==ll&&R==rr) return f[t];

        int ans=s[t];
        int M=(L+R)>>1;
        if(rr<=M) upMax(ans,query(t<<1,L,M,ll,rr));
        else if(ll>M) upMax(ans,query(t<<1|1,M+1,R,ll,rr));
        else
        {
            upMax(ans,query(t<<1,L,M,ll,M));
            upMax(ans,query(t<<1|1,M+1,R,M+1,rr));
        }
        return ans;
    }
};

struct Seg1
{
    Seg f[N<<1],s[N<<1];

    void insert(int t,int L,int R,int ll,int rr)
    {
        f[t].insert(1,1,m,yL,yR,h);
        if(L==ll&&R==rr)
        {
            s[t].insert(1,1,m,yL,yR,h);
            return;
        }
        int M=(L+R)>>1;
        if(rr<=M) insert(t<<1,L,M,ll,rr);
        else if(ll>M) insert(t<<1|1,M+1,R,ll,rr);
        else
        {
            insert(t<<1,L,M,ll,M);
            insert(t<<1|1,M+1,R,M+1,rr);
        }
    }

    int query(int t,int L,int R,int ll,int rr)
    {
        if(L==ll&&R==rr) return f[t].query(1,1,m,yL,yR);
        int ans=s[t].query(1,1,m,yL,yR);
        int M=(L+R)>>1;
        if(rr<=M) upMax(ans,query(t<<1,L,M,ll,rr));
        else if(ll>M) upMax(ans,query(t<<1|1,M+1,R,ll,rr));
        else
        {
            upMax(ans,query(t<<1,L,M,ll,M));
            upMax(ans,query(t<<1|1,M+1,R,M+1,rr));
        }
        return ans;
    }
};

Seg1 a;

int Q;

int main()
{
    RD(n,m,Q);
    while(Q--)
    {
        int d,s,w,x,y;
        scanf("%d%d%d%d%d",&d,&s,&w,&x,&y);
        xL=x+1;
        xR=x+d;
        yL=y+1;
        yR=y+s;
        h=a.query(1,1,n,xL,xR);
        h+=w;
        a.insert(1,1,n,xL,xR);
    }
    xL=yL=1;
    xR=n;
    yR=m;
    int ans=a.query(1,1,n,1,n);
    printf("%d\n",ans);
}

BZOJ 1513 [POI2006]Tet-Tetris 3D的更多相关文章

  1. bzoj 1513 [POI2006]Tet-Tetris 3D(二维线段树)

    1513: [POI2006]Tet-Tetris 3D Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 540  Solved: 175[Submit ...

  2. bzoj 1513 POI2006 Tet-Tetris 3D 二维线段树+标记永久化

    1511: [POI2006]OKR-Periods of Words Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 351  Solved: 220[S ...

  3. bzoj1513【POI2006】Tet-Tetris 3D

    1513: [POI2006]Tet-Tetris 3D Time Limit: 30 Sec  Memory Limit: 162 MB Submit: 733  Solved: 245 [Subm ...

  4. 模拟 - BZOJ 1510 [POI2006] Kra-The Disks

    BZOJ 1510 [POI2006] Kra-The Disks 描述 Johnny 在生日时收到了一件特殊的礼物,这件礼物由一个奇形怪状的管子和一些盘子组成. 这个管子是由许多不同直径的圆筒(直径 ...

  5. 【BZOJ】1513: [POI2006]Tet-Tetris 3D

    题意 给\(n(1 \le n \le 20000)\)个立方体\((x, y, z)\),依次落下.求所有立方体落下完了以后最高的高度. 分析 平面求最大值,平面更新最大值. 题解 二维线段树走起, ...

  6. bzoj 1510 [POI2006]Kra-The Disks 二分

    1510: [POI2006]Kra-The Disks Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 466  Solved: 272[Submit][ ...

  7. bzoj 1520 [POI2006]Szk-Schools 费用流

    [POI2006]Szk-Schools Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 743  Solved: 381[Submit][Status][ ...

  8. bzoj 1517 [POI2006]Met 贪心

    [POI2006]Met Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 203  Solved: 108[Submit][Status][Discus ...

  9. BZOJ 1511: [POI2006]OKR-Periods of Words

    Description 求一个最长周期. Sol KMP. 一个点的最短周期就是 \(i-next[i]\) 此外 \(i-next[next[i]],i-next[next[next[i]]]\) ...

随机推荐

  1. 广告点击率 CTR预估中GBDT与LR融合方案

    http://www.cbdio.com/BigData/2015-08/27/content_3750170.htm 1.背景 CTR预估,广告点击率(Click-Through Rate Pred ...

  2. 如何在真机上调试Android应用程序(图文详解)(zz)

    http://www.cnblogs.com/lanxuezaipiao/archive/2013/03/11/2953564.html   1.首先将手机设置为调试模式 方法:设置——应用程序——开 ...

  3. 关于jQuery的bind()\trigger()\triggerHandler()

    1.bind() 事件绑定. 多个事件会链式累加,而不会覆盖. 即 $("div").bind("click",funtion(){alert("te ...

  4. Delphi Xe2 后的版本如何让Delphi程序启动自动“以管理员身份运行"

    由于Vista以后win中加入的UAC安全机制,采用Delphi开发的程序如果不右键点击“以管理员身份运行”,则会报错. 在XE2以上的Delphi版本处理这个问题已经非常简单了. 右建点击工程,选择 ...

  5. scala一些高级类型

    package com.ming.test import scala.collection.mutable.ArrayBuffer import scala.io.Source import java ...

  6. Erlang-基础篇

    一.整数运算: 1.Erlang采用不定长的整数来进行整数的算术演算.在Erlang中,整数运算没有误差,因此无需担心运算溢出,也不用为了一个固定字长容纳不下一个大整数而伤脑筋: 二.变量: 1.所有 ...

  7. 和菜鸟一起学linux总线驱动之初识spi驱动数据传输流程【转】

    转自:http://blog.csdn.net/eastmoon502136/article/details/7921846 对于SPI的一些结构体都有所了解之后呢,那么再去瞧瞧SPI的那些长见的操作 ...

  8. java技术用ssh从linux服务器下载数据

    通常需要从linux服务器获取数据文件,而通常能有的访问方式只有ssh,所以就可以用ssh进行数据下载. java连接远程主机的方式有多种,这里和大家分享的是通过ssh方式连接远程主机,使用的是jsc ...

  9. java中IO流操作的标准异常类

    package 加入异常处理的字节流操作; import java.io.FileNotFoundException; import java.io.FileOutputStream; import ...

  10. Hosting custom WPF calendar control in AX 2012

    原作者: https://community.dynamics.com/ax/b/axilicious/archive/2013/05/20/hosting-custom-wpf-calendar-c ...