关闭

bzoj 1513: [POI2006]Tet-Tetris 3D 二维线段树

62人阅读 评论(1) 收藏 举报
分类:

题目链接


【想说的话】

...........感冒了好难受


【题解】

二维线段树+标记永久化


【代码】

#include<bits/stdc++.h>

#define MAXN 3030
#define ls x<<1,lx,mid
#define rs x<<1|1,mid+1,rx

using namespace std;

inline int rd(){
	int x=0,y=1;char c=getchar();
	while(c<'0' || c>'9'){if(c=='-')y=-y;c=getchar();}
	while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();
	return x*y;
}

int n,m,q;
int ll,rr;

struct treex{
	int Max[MAXN],lazy[MAXN];
	void update(int x,int lx,int rx,int l,int r,int k){
		Max[x]=max(Max[x],k);
		if(lx>=l && rx<=r)lazy[x]=max(lazy[x],k);
		else{
			int mid=(lx+rx)/2;
			if(r<=mid)update(ls,l,r,k);
			else if(l>mid)update(rs,l,r,k);
			else update(ls,l,mid,k),update(rs,mid+1,r,k);
		}
	}
	int query(int x,int lx,int rx,int l,int r){
		if(lx>=l && rx<=r)return Max[x];
		int mid=(lx+rx)/2,ans=lazy[x];
		if(r<=mid)ans=max(ans,query(ls,l,r));
		else if(l>mid)ans=max(ans,query(rs,l,r));
		else ans=max(ans,max(query(ls,l,mid),query(rs,mid+1,r)));
		return ans;
	}
};

struct treey{
	treex Max[MAXN],lazy[MAXN];
	void update(int x,int lx,int rx,int l,int r,int k){
		Max[x].update(1,1,n,ll,rr,k);
		if(lx>=l && rx<=r)lazy[x].update(1,1,n,ll,rr,k);
		else{
			int mid=(lx+rx)/2;
			if(r<=mid)update(ls,l,r,k);
			else if(l>mid)update(rs,l,r,k);
			else update(ls,l,mid,k),update(rs,mid+1,r,k);
		}
	}
	int query(int x,int lx,int rx,int l,int r){
		if(lx>=l && rx<=r)return Max[x].query(1,1,n,ll,rr);
		int mid=(lx+rx)/2,ans=lazy[x].query(1,1,n,ll,rr);
		if(r<=mid)ans=max(ans,query(ls,l,r));
		else if(l>mid)ans=max(ans,query(rs,l,r));
		else ans=max(ans,max(query(ls,l,mid),query(rs,mid+1,r)));
		return ans;
	}
}tree;

int main(){
	n=rd(),m=rd(),q=rd();
	while(q--){
		int d=rd(),s=rd(),w=rd(),x=rd(),y=rd();
		ll=x+1,rr=x+d;
		int h=tree.query(1,1,m,y+1,y+s)+w;
		tree.update(1,1,m,y+1,y+s,h);
	}
	ll=1,rr=n;
	printf("%d\n",tree.query(1,1,m,1,m));
	
	return 0;
}


0
0
查看评论

bzoj 1513: [POI2006]Tet-Tetris 3D(二维线段树+标记永久化)

1513: [POI2006]Tet-Tetris 3D Time Limit: 30 Sec  Memory Limit: 162 MB Submit: 845  Solved: 289 [Submit][Sta...
  • clover_hxy
  • clover_hxy
  • 2016-06-18 17:23
  • 585

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

一句话题意:给你一个矩形,给出两种操作,一种询问区间最大值,一种区间加。 由于刚学习二维树状数组,所以想试试,但是想了想发现没法维护最大值,或者说强行维护的话好像会到达log^4。。。因为一维树状数组维护最大值是log^2的,这就得不偿失了。 所以还是二维线段树,一开始打错了,删掉3000多b重...
  • qq_35866453
  • qq_35866453
  • 2017-08-16 22:01
  • 75

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

1513: [POI2006]Tet-Tetris 3D Time Limit: 30 Sec  Memory Limit: 162 MB Submit: 1119  Solved: 378 [Submit][St...
  • BlackJack_
  • BlackJack_
  • 2017-07-05 19:09
  • 157

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

二维线段树 算个模板题吧 区间赋值 区间max 一遇到带标记的树套树就蛋疼 怎么说呢 标记永久化 就不用下传了  从根到某个节点的区间上的路径自顶向下顺着递归的顺序修改 就省去了pushup #include #include #include using namespa...
  • u014609452
  • u014609452
  • 2016-05-16 21:33
  • 266

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

BZOJ 1513 [POI2006]Tet-Tetris 3D 二维线段树
  • wzq_QwQ
  • wzq_QwQ
  • 2015-10-09 20:52
  • 2576

BZOJ 1513 POI2006 Tet-Tetris 3D 二维线段树

题目大意:给定一个矩阵,初始每个位置上的元素都是0,每次选择一个子矩形,将这个子矩形内的值修改为这个子矩形内的最大值+hh,求最终所有位置上的最大值我们需要维护一种数据结构,支持更新子矩形的值和查询子矩形最大值似乎二维线段树就可以了?但是YY了一下我们会发现两个没法解决的问题: 1.标记的下传 ...
  • PoPoQQQ
  • PoPoQQQ
  • 2015-06-28 20:46
  • 1901

【BZOJ 1513】Tet-Tetris 3D【二维线段树】

Description在新游戏中你将知道落下的立方体信息以及位置,你的任务就是回答所有立方体落下后最高的方块的高度.所有的立方体在下落过程中都是垂直的并且不会旋转.平板左下角坐标为原点,并且平行于坐标轴.Solution二维线段树板子题 同时两层树之间的信息不能相互传递。Code#include&...
  • nixinyis
  • nixinyis
  • 2017-04-13 17:25
  • 138

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

题意:有一个坐标系,每次将一个矩形内所有点的值改为这个矩形内最大值+一个数,求最后所有点的最大值 N<= 20000,坐标<= 1000 首先二维线段树由于不能下推上传标记所以只能解决资磁标记永久化的问题 然后观察这个问题,由于值只能改大不能改小,所以一个后来的标记肯定不会使...
  • Mima_Reincarnation
  • Mima_Reincarnation
  • 2017-04-27 20:14
  • 340

【BZOJ】1513 [POI2006]Tet-Tetris 3D 树套树

题目传送门 好像我真的低估了树套树了……做完了前面的那题,我竟然以为自己彻底掌握了树套树…… 大佬传送门,话说还是ZZK最强了,博客写的如此清晰、明白。对线段树套线段树还不是很理解的同学可以去大佬的博客里学习一下。 写一下自己对树套树的理解: 树套树其实是由两种线段树组成——权值线段树和标记线...
  • lyfsb
  • lyfsb
  • 2017-09-28 16:59
  • 98

BZOJ 1513 POI 2006 Tet-Tetris 3D 二维线段树

题目大意:三维俄罗斯方块,问最后摞了多高。 思路:二维线段树的裸题。但是要注意二维线段树不支持标记下穿。所以就不下传,每次更新答案的时候先看标记,然后用所有的跟标记比较大小之后返回。 具体看代码吧,不知道怎么说。 CODE: #define _CRT_SECURE_NO_...
  • jiangyuze831
  • jiangyuze831
  • 2015-02-27 08:55
  • 866
    -广告-
    一个极其温馨的提示
    个人资料
    • 访问:48758次
    • 积分:1745
    • 等级:
    • 排名:千里之外
    • 原创:127篇
    • 转载:1篇
    • 译文:0篇
    • 评论:23条
    最新评论