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

    二维线段树板子,注意标记永久化。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int ans,A,B,n,ql,qr,qd,qu;
     4 struct Querx
     5 {
     6     int v[3005],tag[3005];
     7     void change(int k,int l,int r,int L,int R,int w)
     8     {
     9         v[k]=max(v[k],w);
    10         if(l==L&&r==R){tag[k]=max(tag[k],w);return;}
    11         int m=l+r>>1;
    12         if(R<=m)change(k<<1,l,m,L,R,w);
    13         else if(L>m)change(k<<1|1,m+1,r,L,R,w);
    14         else change(k<<1,l,m,L,m,w),change(k<<1|1,m+1,r,m+1,R,w);
    15     }
    16     int query(int k,int l,int r,int L,int R)
    17     {
    18         if(l==L&&r==R){return v[k];}
    19         int m=l+r>>1;int tmp=tag[k];
    20         if(R<=m)return max(tmp,query(k<<1,l,m,L,R));
    21         else if(L>m)return max(tmp,query(k<<1|1,m+1,r,L,R));
    22         else return max(tmp,max(query(k<<1,l,m,L,m),query(k<<1|1,m+1,r,m+1,R)));
    23     }
    24 };
    25 struct Query
    26 {
    27     Querx v[3005],tag[3005];
    28     void change(int k,int l,int r,int L,int R,int w)
    29     {
    30         v[k].change(1,1,B,qd,qu,w);
    31         if(l==L&&r==R){tag[k].change(1,1,B,qd,qu,w);return;}
    32         int m=l+r>>1;
    33         if(R<=m)change(k<<1,l,m,L,R,w);
    34         else if(L>m)change(k<<1|1,m+1,r,L,R,w);
    35         else change(k<<1,l,m,L,m,w),change(k<<1|1,m+1,r,m+1,R,w);
    36     }
    37     int query(int k,int l,int r,int L,int R)
    38     {
    39         if(l==L&&r==R){return v[k].query(1,1,B,qd,qu);}
    40         int m=l+r>>1;int tmp=tag[k].query(1,1,B,qd,qu);
    41         if(R<=m)return max(tmp,query(k<<1,l,m,L,R));
    42         else if(L>m)return max(tmp,query(k<<1|1,m+1,r,L,R));
    43         else return max(tmp,max(query(k<<1,l,m,L,m),query(k<<1|1,m+1,r,m+1,R)));
    44     }
    45 }P;
    46 int main()
    47 {
    48     scanf("%d%d%d",&A,&B,&n);
    49     for(int i=1;i<=n;++i)
    50     {
    51         int x,y,z,h,a,b;
    52         scanf("%d%d%d%d%d",&x,&y,&z,&a,&b);
    53         ql=a+1;qr=a+x;qd=b+1;qu=b+y;
    54         ans=P.query(1,1,A,ql,qr);
    55         P.change(1,1,A,ql,qr,ans+z);
    56     }
    57     qd=1;qu=B;ans=P.query(1,1,B,1,B);
    58     printf("%d
    ",ans);
    59     return 0;
    60 }
  • 相关阅读:
    MySQL事务学习-->隔离级别
    ssh升级
    通过普通用户向各个节点服务器分发文件到各个目录
    parted在2T以上硬盘上分区操作
    时间同步出现ntpdate[1788]: the NTP socket is in use, exiting
    kvm解决1000M网卡问题
    mysql主从同步问题解决汇总
    ....
    iOS App Icon图标 尺寸规范
    SpringMVC注解配置
  • 原文地址:https://www.cnblogs.com/nbwzyzngyl/p/8485059.html
Copyright © 2011-2022 走看看