[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 ...
随机推荐
- 如何加快JavaScript的加载与执行
JS 有个很无语的阻塞特性,就是当浏览器在执行JS 代码时,不能同时做其他任何事情,无论其代码是内嵌的还是外部的. 浏览器在碰到一个引入外部JS 文件的<script>标签时会停下所有工作 ...
- E. Intercity Travelling
E. Intercity Travelling time limit per test 1.5 seconds memory limit per test 256 megabytes input st ...
- tomcat编码配置
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" ...
- c++ 批量初始化数组 fill和fill_n函数的应用
转自c++ 如何批量初始化数组 fill和fill_n函数的应用 std::fill(a+,a+,0x3f3f3f3f);///从下标2到下标10 前闭后开 共8个 std::fill_n(a+,,0 ...
- 【BZOJ3450】Easy [期望DP]
Easy Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 某一天WJMZBMR在打osu~~ ...
- 服务器应用程序不可用,由于无法创建应用程序域,因此未能执行请求。错误: 0x80070002 系统找不到指定的文件。
使用360更新网站补丁导致.net2.0环境报错问题现象:服务器应用程序不可用查看日志:出现由于无法创建应用程序域,因此未能执行请求.错误: 0x80070002 系统找不到指定的文件. 搜索定位:罪 ...
- php使用curl模拟登录带验证码的网站
需求是这样的,需要登录带验证码的网站,获取数据,但是不可能人为一直去记录数据,想通过自动采集的方式进行,如下是试验出来的结果代码!有需要的可以参考下! <?php namespace Home\ ...
- RabbitMQ消息队列(三): 发布/订阅
1. 订阅/发布: 前面worker示例中的每个任务都是只发送给某一个worker,如果我们多个worker都需要接收处理同一个任务,此时就要使用 订阅/发布功能,比如,日志模块产生日志并发送到队列中 ...
- HTML5初学---坦克大战基础
让小球动起来,根据键盘的W(上),D(右),S(下),A(左):键的点击移动小球 <!DOCTYPE html> <html> <head> <meta ch ...
- shell里面比较大小
#!/bin/bashif [ $1 -gt $2 ]then echo "$1>$2"else echo "$2>$1"fi# 数字判断一些命令 ...