洛谷【P3437】[POI2006]TET-Tetris 3D
浅谈树状数组与线段树:https://www.cnblogs.com/AKMer/p/9946944.html
浅谈标记永久化:https://www.cnblogs.com/AKMer/p/10137227.html
题目传送门:https://www.luogu.org/problemnew/show/P3437
位置线段树套位置线段树,支持区间询问最大值和区间取\(max\)操作。
标记永久化,每次询问把区间内最大值和覆盖这个区间的标记取\(max\)即可。
时间复杂度:\(O(NlogDlogS)\)
空间复杂度:\(O(DS)\)
代码如下:
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=1005;
int D,S,N;
int read() {
int x=0,f=1;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
}
struct segment_treeS {
int mx[maxn<<2],tag[maxn<<2];
void change(int p,int l,int r,int L,int R,int v) {
mx[p]=max(mx[p],v);
if(L<=l&&r<=R) {tag[p]=max(tag[p],v);return;}
int mid=(l+r)>>1;
if(L<=mid)change(p<<1,l,mid,L,R,v);
if(R>mid)change(p<<1|1,mid+1,r,L,R,v);
}
int query(int p,int l,int r,int L,int R) {
if(L<=l&&r<=R)return mx[p];
int mid=(l+r)>>1,res=tag[p];
if(L<=mid)res=max(res,query(p<<1,l,mid,L,R));
if(R>mid)res=max(res,query(p<<1|1,mid+1,r,L,R));
return res;
}
};
struct segment_treeD {
segment_treeS mx[maxn<<2],tag[maxn<<2];
int query(int p,int l,int r,int x1,int x2,int y1,int y2) {
if(x1<=l&&r<=x2)return mx[p].query(1,0,S-1,y1,y2);
int mid=(l+r)>>1,res=tag[p].query(1,0,S-1,y1,y2);
if(x1<=mid)res=max(res,query(p<<1,l,mid,x1,x2,y1,y2));
if(x2>mid)res=max(res,query(p<<1|1,mid+1,r,x1,x2,y1,y2));
return res;
}
void change(int p,int l,int r,int x1,int x2,int y1,int y2,int v) {
mx[p].change(1,0,S-1,y1,y2,v);
if(x1<=l&&r<=x2) {tag[p].change(1,0,S-1,y1,y2,v);return;}
int mid=(l+r)>>1;
if(x1<=mid)change(p<<1,l,mid,x1,x2,y1,y2,v);
if(x2>mid)change(p<<1|1,mid+1,r,x1,x2,y1,y2,v);
}
}T;
int main() {
D=read(),S=read(),N=read();
for(int i=1;i<=N;i++) {
int d=read(),s=read(),w=read(),x=read(),y=read();
int mx=T.query(1,0,D-1,x,x+d-1,y,y+s-1);
T.change(1,0,D-1,x,x+d-1,y,y+s-1,mx+w);
}
printf("%d\n",T.query(1,0,D-1,0,D-1,0,S-1));
return 0;
}
洛谷【P3437】[POI2006]TET-Tetris 3D的更多相关文章
- 洛谷 P3437 [POI2006]TET-Tetris 3D 解题报告
P3437 [POI2006]TET-Tetris 3D 题目描述 The authors of the game "Tetris" have decided to make a ...
- 洛谷P3437 [POI2006]TET-Tetris 3D(二维线段树 标记永久化)
题意 题目链接 Sol 二维线段树空间复杂度是多少啊qwqqq 为啥这题全网空间都是\(n^2\)还有人硬要说是\(nlog^2n\)呀.. 对于这题来说,因为有修改操作,我们需要在外层线段树上也打标 ...
- 洛谷 P3437 [POI2006]TET-Tetris 3D
二维线段树区间更新啊 树套树的外层树,如果是线段树的话一般似乎不能打标记?(毕竟标记不好下传) 然而起码对于这题是可以的...对于外层线段树,每个节点放两个内层线段树dat和setv,分别是得到的值和 ...
- [洛谷P3444] [POI2006]ORK-Ploughing
洛谷题目链接[POI2006]ORK-Ploughing 题目描述 Byteasar, the farmer, wants to plough his rectangular field. He ca ...
- 洛谷P3434 [POI2006]KRA-The Disks(线段树)
洛谷题目传送门 \(O(n)\)的正解算法对我这个小蒟蒻真的还有点思维难度.洛谷题解里都讲得很好. 考试的时候一看到300000就直接去想各种带log的做法了,反正不怕T...... 我永远只会有最直 ...
- 洛谷P3435 [POI2006]OKR-Period of Words [KMP]
洛谷传送门,BZOJ传送门 OKR-Period of Words Description 一个串是有限个小写字符的序列,特别的,一个空序列也可以是一个串. 一个串P是串A的前缀, 当且仅当存在串B, ...
- 洛谷P3434 [POI2006]KRA-The Disks [模拟]
题目传送门 KRA 题目描述 For his birthday present little Johnny has received from his parents a new plaything ...
- 【题解】洛谷P3435 [POI2006] OKR-Periods of Words(KMP)
洛谷P3435:https://www.luogu.org/problemnew/show/P3435 思路 来自Kamijoulndex大佬的解释 先把题面转成人话: 对于给定串的每个前缀i,求最长 ...
- 洛谷.3437.[POI2006]TET-Tetris 3D(二维线段树)
题目链接 下落一个d*s的方块,则要在这个平面区域找一个最高的h' 更新整个平面区域的值为h+h' 对于本题,维护最大高度h和all 对于平面的x轴维护一棵线段树t1,每个t1的节点维护对应y轴的两棵 ...
- 洛谷P3434 [POI2006]KRA-The Disks
P3434 [POI2006]KRA-The Disks 题目描述 For his birthday present little Johnny has received from his paren ...
随机推荐
- unbuntu16.04上python开发环境搭建建议
unbuntu16.04上python开发环境搭建建议 2017-12-20 10:39:27 推荐列表: pycharm: 可以自行破解,但是不推荐,另外也不稳定 pydev+eclipse: ...
- 怎么用cookie解决选项卡问题刷新后怎么保持原来的选项?
什么是cookie? Cookies虽然一般都以英文名呈现,但是它还是有一个可爱的中文名“小甜饼”.Cookies是指服务器暂存放在你的电脑里的txt格式的文本文件资料,主要用于网络服务器辨别电脑使用 ...
- ubuntu 安装 pygame 很好玩的东西
1. 简介 pygame 是基于对 SDL库的python 封装,提供python接口.SDL(Simple DirectMedia Layer) 是一个跨平台的游戏开发库,方便游戏开发和移植.目前最 ...
- iOS10.3 UILable中划线失效问题
iOS10.3系统的一个Bug,在UILable中含有中文时,中划线会失效 NSString *priceStr = [NSString stringWithFormat:@"%.2f元&q ...
- 如果这种方式导致程序明显变慢或者引起其他问题,我们要重新思考来通过 goroutines 和 channels 来解决问题
https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/09.3.md 9.3 锁和 sync 包 在一些复杂的程序中,通常通 ...
- (转)jQuery的deferred对象详解
作者: 阮一峰 日期: 2011年8月16日 jQuery的开发速度很快,几乎每半年一个大版本,每两个月一个小版本. 每个版本都会引入一些新功能.今天我想介绍的,就是从jQuery 1.5.0版本开始 ...
- Java基础之I/O流
一.数据流的基本概念 数据流是一串连续不断的数据的集合,就象水管里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流.数据写入程序可以是一段.一段地向数据流管道中写入数据, ...
- 【ansible】ansible部署方式以及部署包
最近研究ansible的使用,在使用pip安装的时候遇到很多奇怪的问题,为此采用了手动安装的方式,并编写了一键安装脚本. ansible要求机器必须安装python2.6以上版本,可以通过一下命令查看 ...
- Flask简介
一. Python 现阶段三大主流Web框架 Django Tornado Flask 对比 1.Django 主要特点是大而全,集成了很多组件,例如: Models Admin Form 等等, 不 ...
- 使用valgrind进行内存泄漏和非法内存操作检测
valgrind是一个强大的工具,最常用的功能是用它来检测内存泄漏和非法内存的使用.要想让valgrind报告的更加细致,请使用-g进行编译. 基本命令如下: $ valgrind --tool=me ...