码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ1513[POI2006]Tet-Tetris 3D

时间:2018-02-28 18:33:30      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:clu   max   printf   names   mes   space   线段   scan   print   

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

 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

标签:clu   max   printf   names   mes   space   线段   scan   print   

原文地址:https://www.cnblogs.com/nbwzyzngyl/p/8485059.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!