BZOJ1513[POI2006]Tet-Tetris 3D

Posted 大奕哥&VANE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\n",ans);
59     return 0;
60 }

 

以上是关于BZOJ1513[POI2006]Tet-Tetris 3D的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ1513[POI2006]Tet-Tetris 3D 二维线段树

BZOJ 1513: [POI2006]Tet-Tetris 3D

BZOJ1513[POI2006]Tet-Tetris 3D

BZOJ1513 [POI2006]Tet-Tetris 3D 二维线段树

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

bzoj1513: [POI2006]Tet-Tetris 3D