[BZOJ1513]Tet-Tetris 3D
get了新的标记永久化技能~
这题要求询问max和覆盖,因为是线段树套线段树,所以内外都不可以标记下传
这种标记永久化的套路是维护两个标记:$mx,all$,$mx$表示这个子树内的真最大值,$all$表示整个子树曾经被覆盖过这样的最大值
修改:更新经过节点的$mx$和覆盖区间节点的$all$
查询:统计经过节点的$all$和覆盖区间节点的$mx$
然后就不用下传标记了,还有写成struct会方便许多
类似地,区间加的标记永久化的两个标记是【子树和(假)】还有【子树增值】,【子树和(假)】+【子树增值】=【子树和(真)】
#include<stdio.h>
int n,m;
int max(int a,int b){return a>b?a:b;}
struct iseg{
int mx[3010],al[3010];
int query(int L,int R,int l,int r,int x){
if(L<=l&&r<=R)return mx[x];
int ans=al[x],mid=(l+r)>>1;
if(L<=mid)ans=max(ans,query(L,R,l,mid,x<<1));
if(mid<R)ans=max(ans,query(L,R,mid+1,r,x<<1|1));
return ans;
}
void modify(int L,int R,int v,int l,int r,int x){
mx[x]=max(mx[x],v);
if(L<=l&&r<=R){
al[x]=max(al[x],v);
return;
}
int mid=(l+r)>>1;
if(L<=mid)modify(L,R,v,l,mid,x<<1);
if(mid<R)modify(L,R,v,mid+1,r,x<<1|1);
}
};
struct oseg{
iseg mx[3010],al[3010];
int query(int L,int R,int Li,int Ri,int l,int r,int x){
if(L<=l&&r<=R)return mx[x].query(Li,Ri,1,m,1);
int ans=al[x].query(Li,Ri,1,m,1),mid=(l+r)>>1;
if(L<=mid)ans=max(ans,query(L,R,Li,Ri,l,mid,x<<1));
if(mid<R)ans=max(ans,query(L,R,Li,Ri,mid+1,r,x<<1|1));
return ans;
}
void modify(int L,int R,int Li,int Ri,int v,int l,int r,int x){
mx[x].modify(Li,Ri,v,1,m,1);
if(L<=l&&r<=R)return al[x].modify(Li,Ri,v,1,m,1);
int mid=(l+r)>>1;
if(L<=mid)modify(L,R,Li,Ri,v,l,mid,x<<1);
if(mid<R)modify(L,R,Li,Ri,v,mid+1,r,x<<1|1);
}
}t;
int main(){
int q,d,s,w,x,y;
scanf("%d%d%d",&n,&m,&q);
while(q--){
scanf("%d%d%d%d%d",&d,&s,&w,&x,&y);
t.modify(x+1,x+d,y+1,y+s,t.query(x+1,x+d,y+1,y+s,1,n,1)+w,1,n,1);
}
printf("%d",t.query(1,n,1,m,1,n,1));
}
[BZOJ1513]Tet-Tetris 3D的更多相关文章
- bzoj1513: [POI2006]Tet-Tetris 3D
Description Task: Tetris 3D "Tetris" 游戏的作者决定做一个新的游戏, 一个三维的版本, 在里面很多立方体落在平面板,一个立方体开始落下直到碰上一 ...
- BZOJ1513:[POI2006]TET-Tetris 3D(线段树套线段树)
Description Task: Tetris 3D "Tetris" 游戏的作者决定做一个新的游戏, 一个三维的版本, 在里面很多立方体落在平面板,一个立方体开始落下直到碰上一 ...
- BZOJ1513 [POI2006]Tet-Tetris 3D 【二维线段树】
题目链接 BZOJ1513 题解 真正地理解了一波线段树标记永久化的姿势 每个节点维护两个值\(v\)和\(tag\) \(v\)代表儿子中的最值 \(tag\)代表未下传的最值 显然节点的区间大于等 ...
- 【BZOJ1513】[POI2006]Tet-Tetris 3D 二维线段树
[BZOJ1513][POI2006]Tet-Tetris 3D Description Task: Tetris 3D "Tetris" 游戏的作者决定做一个新的游戏, 一个三维 ...
- bzoj1513【POI2006】Tet-Tetris 3D
1513: [POI2006]Tet-Tetris 3D Time Limit: 30 Sec Memory Limit: 162 MB Submit: 733 Solved: 245 [Subm ...
- bzoj 1513 [POI2006]Tet-Tetris 3D(二维线段树)
1513: [POI2006]Tet-Tetris 3D Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 540 Solved: 175[Submit ...
- 第1部分: 游戏引擎介绍, 渲染和构造3D世界
原文作者:Jake Simpson译者: 向海Email:GameWorldChina@myway.com ---------------------------------------------- ...
- 基于 HTML5 的 WebGL 3D 版俄罗斯方块
前言 摘要:2D 的俄罗斯方块已经被人玩烂了,突发奇想就做了个 3D 的游戏机,用来玩俄罗斯方块...实现的基本想法是先在 2D 上实现俄罗斯方块小游戏,然后使用 3D 建模功能创建一个 3D 街机模 ...
- 洛谷 P3437 [POI2006]TET-Tetris 3D 解题报告
P3437 [POI2006]TET-Tetris 3D 题目描述 The authors of the game "Tetris" have decided to make a ...
随机推荐
- angular js的Inline Array Annotation的理解
inline Array annotation的形式是: someModule.controller('MyController', ['$scope', 'greeter', function($s ...
- Eclipse工具栏太多,自定义工具栏,去掉调试
Window --> Customize Perspective... --> Tool Bar Visibility 去掉勾选debug Tip:最新版本Customize Persp ...
- kafka+flume+HDFS日志采集项目框架
1,项目图如下: 2, 实现过程 启动HDFS: sbin/start-dfs.sh 启动zookeeper(三台): bin/zkServer.sh start 启动kafka(三台): root@ ...
- [BZOJ1151][CTSC2007]动物园zoo 解题报告|DP|位运算
Description 最近一直在为了学习算法而做题,这道题是初一小神犇让我看的.感觉挺不错于是写了写. 这道题如果是一条线的话我们可以构造一个DP f[i,j]表示以i为起点,i,i+1...i+4 ...
- vscode Python 运行环境配置
{ "git.ignoreMissingGitWarning": true, "window.zoomLevel": 1, "[python]&quo ...
- Linux设备模型(3)_Uevent【转】
转自:http://www.wowotech.net/device_model/uevent.html 1. Uevent的功能 Uevent是Kobject的一部分,用于在Kobject状态发生改变 ...
- python--fnmatch
import fnmatch ''' 这个库专门是用来做文件名匹配的,可以使用通配符如下 * 匹配任何数量的任意字符 ? 匹配单个数量的任意字符 [seq] 匹配seq中的任意字符 [!seq] 匹配 ...
- 5.flume实战(二)
需求:监控一个文件实时采集新增的数据并输出到控制台 简单理解就是:监控一个文件,只要这个文件有新的内容追加,就将它输出到控制台. agent技术选型:exec source + memory chan ...
- 【python】抄写爬淘宝已买到的宝贝的代码
教程地址:http://cuiqingcai.com/1076.html 这一篇掌握的不好.虽然代码可以跑,但是里面的很多东西都一知半解.需要有空的时候系统整理. 原代码中的正则表达式已经失效了,我自 ...
- MATLAB求解方程与方程组
1. solve函数 ①求解单个一元方程的数值解 syms x; x0 = double(solve(x +2 - exp(x),x)); 求x+2 = exp(x)的解,结果用double ...