zoukankan      html  css  js  c++  java
  • BZOJ 1513: [POI2006]Tet-Tetris 3D

    Description

    三维空间从上落下几个长方体,问最后的最高高度.

    Solution

    二维线段树.

    感觉这种东西是可以yy出来的吧..

    对行建线段树,再对列建线段树维护行的信息,注意打标记的位置,和返回的时候一定要记得统计上标记.

    开4倍内存会MLE...

    Code

    /**************************************************************
        Problem: 1513
        User: BeiYu
        Language: C++
        Result: Accepted
        Time:14660 ms
        Memory:143344 kb
    ****************************************************************/
     
    #include <bits/stdc++.h>
    using namespace std;
     
    #define mid ((l+r)>>1)
    #define lc (o<<1)
    #define rc (o<<1|1)
    const int M = 1005;
     
    inline int in(int x=0,char ch=getchar()) { while(ch>'9' || ch<'0') ch=getchar();
        while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();return x; }
     
    int D,S,N;
    int d,s,w,x,y;
    int ql,qr,qx,qy;
     
    struct Node {
        int d[M*3],g[M*3];
         
        void Change(int o,int l,int r,int L,int R,int v) {
            d[o]=max(d[o],v);
            if(L<=l && r<=R) return void( g[o]=max(g[o],v) );
            if(L<=mid) Change(lc,l,mid,L,R,v);
            if(R>mid) Change(rc,mid+1,r,L,R,v);
        }
        int Query(int o,int l,int r,int L,int R) {
            if(L<=l && r<=R) return d[o];
            int res=g[o];
            if(L<=mid) res=max(res,Query(lc,l,mid,L,R));
            if(R>mid) res=max(res,Query(rc,mid+1,r,L,R));
            return res;
        }
    };
     
    struct Seg {
        Node d[M*3],g[M*3];
        void Change(int o,int l,int r,int L,int R,int v) {
            d[o].Change(1,1,S,qx,qy,v);
            if(L<=l && r<=R) return void( g[o].Change(1,1,S,qx,qy,v) );
            if(L<=mid) Change(lc,l,mid,L,R,v);
            if(R>mid) Change(rc,mid+1,r,L,R,v);
        }
        int Query(int o,int l,int r,int L,int R) {
            if(L<=l && r<=R) return d[o].Query(1,1,S,qx,qy);
            int res=g[o].Query(1,1,S,qx,qy);
            if(L<=mid) res=max(res,Query(lc,l,mid,L,R));
            if(R>mid) res=max(res,Query(rc,mid+1,r,L,R));
            return res;
        }
    }py;
    int main() {
        for(D=in(),S=in(),N=in();N--;) {
            d=in(),s=in(),w=in(),x=in(),y=in();
            ql=x+1,qr=x+d,qx=y+1,qy=y+s;
            int tmp=py.Query(1,1,D,ql,qr);
            py.Change(1,1,D,ql,qr,tmp+w);
        }
        qx=1,qy=S;
        printf("%d
    ",py.Query(1,1,D,1,D));
        return 0;
    }
    

      

  • 相关阅读:
    mybatis集成spring
    静态代码块-普通代码块-构造代码块(好多图)
    Mybatis generator(复制粘贴完成)
    委派模式和适配器模式
    mysq--索引模块
    谈谈TCP的四次挥手
    说说TCP的三次握手
    网络基础知识
    java的IO机制
    std::bind接口与实现
  • 原文地址:https://www.cnblogs.com/beiyuoi/p/6390076.html
Copyright © 2011-2022 走看看