bzoj1513【POI2006】Tet-Tetris 3D
1513: [POI2006]Tet-Tetris 3D
Time Limit: 30 Sec Memory Limit: 162 MB
Submit: 733 Solved: 245
[Submit][Status][Discuss]
Description
Input
(x + d, y), (x, y + s) and (x + d, y + s).
Output
Sample Input
4 3 2 0 0
3 3 1 3 0
7 1 2 0 3
2 3 3 2 2
Sample Output
HINT
Source
题目大意:给定一个二维矩阵。每次询问一个矩形范围内最大值max。并把矩形内全部数更新为max+p。
看到这道题非常easy想到二维线段树,可是存在两个问题:二维线段树的标记下传和信息上传不easy实现。
那怎么解决呢?答案是用标记永久化。
我们用v和tag表示由子节点求出的最大值和全然覆盖该区间的最大值。每次改动时把路径上全部的v和底端的tag都改动,每次询问将路径上的全部tag和底端的v取最大值。
#include<set>
#include<map>
#include<ctime>
#include<queue>
#include<cmath>
#include<cstdio>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define ll long long
#define inf 1000000000
using namespace std;
ll read()
{
ll x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int D,S,N;
int ql,qr,qd,qu;
struct segx
{
int v[3005],tag[3005];
void change(int k,int l,int r,int x,int y,int val)
{
v[k]=max(v[k],val);
if(l==x&&y==r){tag[k]=max(tag[k],val);return;}
int mid=(l+r)>>1;
if(x<=mid)change(k<<1,l,mid,x,min(mid,y),val);
if(y>mid)change(k<<1|1,mid+1,r,max(x,mid+1),y,val);
}
int query(int k,int l,int r,int x,int y)
{
if(l==x&&y==r)return v[k];
int mid=(l+r)>>1,ans=tag[k];
if(x<=mid)ans=max(ans,query(k<<1,l,mid,x,min(mid,y)));
if(y>mid)ans=max(ans,query(k<<1|1,mid+1,r,max(x,mid+1),y));
return ans;
}
};
struct segy
{
segx v[3005],tag[3005];
void change(int k,int l,int r,int x,int y,int val)
{
v[k].change(1,1,S,qd,qu,val);
if(l==x&&y==r){tag[k].change(1,1,S,qd,qu,val);return;}
int mid=(l+r)>>1;
if(x<=mid)change(k<<1,l,mid,x,min(mid,y),val);
if(y>mid)change(k<<1|1,mid+1,r,max(x,mid+1),y,val);
}
int query(int k,int l,int r,int x,int y)
{
if(l==x&&r==y)return v[k].query(1,1,S,qd,qu);
int mid=(l+r)>>1,ans=tag[k].query(1,1,S,qd,qu);
if(x<=mid)ans=max(ans,query(k<<1,l,mid,x,min(mid,y)));
if(y>mid)ans=max(ans,query(k<<1|1,mid+1,r,max(x,mid+1),y));
return ans;
}
}T;
int main()
{
D=read();S=read();N=read();
int d,s,w,x,y;
for(int i=1;i<=N;i++)
{
d=read();s=read();w=read();x=read();y=read();
ql=x+1;qr=x+d;qd=y+1;qu=y+s;
int ans=T.query(1,1,D,ql,qr);
T.change(1,1,D,ql,qr,ans+w);
}
qd=1;qu=S;
printf("%d\n",T.query(1,1,D,1,D));
return 0;
}
bzoj1513【POI2006】Tet-Tetris 3D的更多相关文章
- 【转】PCB中3D相关功能详解
如果PCB Layout工程师能够在设计过程中,使用设计工具直观地看到自己设计板子的实际情况,将能够有效的帮助他们的工作.尤其现在PCB板的设计越来越复杂,密度越来越高,如果能够洞察多层板内部则可以帮 ...
- 【转】Altium Designer 3D封装下载及导入教程
首先 先晒几个图:是不是很逼真啊.. ---------------------------------------教程---------------------------------------- ...
- 【原】CSS3的3D动画 ——3D旋转之骰子样式的钟表(2)下.md
之前看到智能社主页的那个骰子样式的钟表,最近研究了一下,虽然没有仔细看他是怎么做的,但是学了css3的动画之后想自己尝试着写一下,用到的原理可能和智能社网站的不太一样,我自己主要用到了css3和js. ...
- 【学】CSS3的3D动画 ——3D旋转之骰子样式的钟表(2)上
这个是3D旋转的进阶版,是一个类似与骰子的正方体.这个版本只有秒数的个位数,还没有写整个钟表,下面那个版本好好想想该怎么写 这个效果需要用到transform-style: preserve-3d. ...
- 【巩固】CSS3的3D动画 ——3D旋转(1)
最近学了妙味的css3的动画,2D,3D的都有,先写一个最简单的3d翻转效果,鼠标移入div,正反面翻转效果. 注意点有: 要给正反面外面加个父级: transform-style: preserve ...
- 【BZOJ】【1520】【POI2006】Szk-Schools
网络流/费用流 比较裸的一道题 依旧是二分图模型,由源点S连向每个学校 i (1,0),「注意是连向第 i 所学校,不是连向学校的标号m[i]……唉这里WA了一次」 然后对于每所学校 i 连接 j+n ...
- 【转载】HRTF音频3D定位技术综述
1. 序 您一定有过这样的经验:在一个炎热的夏夜,讨厌的蚊子在你的耳边飞舞.此时,没有比除掉这个祸害更急所的了,对吧?做到这一点,不必睁大了眼去找蚊子,只需依靠敏锐的听力,一样可以确定蚊子的方位,在漆 ...
- 【Unity】5.1 3D坐标系基础知识
分类:Unity.C#.VS2015 创建日期:2016-04-20 一.简介 在虚拟的游戏世界中,与3D有关的数学知识决定了游戏引擎如何计算和模拟出开发者以及玩家看到的每一帧画面.学习或者回想一下基 ...
- 【转】 Camera模仿3D效果的小例子(图片无限旋转)
import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactor ...
随机推荐
- 自定义Base16加密
自定义Base16加 ...
- asp.net应用发布到IIS无法链接到oracle数据库
遇到这个问题纠结了好久,试了好多的方法,其中我的问题是,先安装了.net frameword4然后又安装的IIS. 正确方式应该是先安装IIS 然后安装.net framework;且应用程序池没有启 ...
- SQLServer2008R2 发布订阅及相关问题解决办法
前言: 前两天接到领导的任务,将一个系统A的客户数据同步到另一个系统B中,以后客户录入入口只有A系统,B系统不提供录入入口,因为各种原因不能使用接口方式A系统和B系统直接交互同步,只能通过数据库重A库 ...
- 532. K-diff Pairs in an Array
Given an array of integers and an integer k, you need to find the number of unique k-diff pairs in t ...
- pt-query-digest
pt-query-digest默认查询时间分布 # Query_time distribution # 1us # 10us ##################################### ...
- [转]如何查询SQL Server连接数
1.获取SQL Server允许同时用户连接的最大数 SELECT @@MAX_CONNECTIONS 2.获取当前指定数据库的连接信息 SELECT * FROM master.dbo.syspro ...
- Python第一天自学,变量,基本数据类型
PyCharm 一些简单常用设置操作设置模板 File->Settings->Editor->File and Code Templates //切换python版本File-> ...
- Hibernate级联之一对多和inverse解析
hibernate的级联可以说是hibernate最重要的部分,只有深入了解了级联的特性与用法,才能运用自如. 这次讨论一对多的情况,所以就使用博客项目的用户表和博客表作为示例,来一起学习hibern ...
- Python 学习之路
这个是我学python以来,写的的第一个小游戏,写的不好 题目:石头剪刀布 主要有两个难度 在普通模式,电脑是随机出 在噩梦下,就是不管你出什么,电脑都会赢你,牛逼吧 #Author:陈浩彬 impo ...
- Python——正则表达式
此篇文章结合小甲鱼的笔记和视频整理. 1 编译 Python 通过 re 模块为正则表达式引擎提供一个接口,同时允许你将正则表达式编译成模式对象,并用它们来进行匹配. 正则表达式被编译为模式对象,该对 ...