【POI 2006】 Tet-Tetris-3D
【题目链接】
【算法】
二维线段树(树套树)
注意标记永久化
【代码】
#include<bits/stdc++.h>
using namespace std;
#define MAXD 1000 int D,S,N,d,s,w,x,y,tmp; struct SegmentTree {
struct Node {
int l,r,Max,tag;
} Tree[MAXD*+];
inline void build(int index,int l,int r) {
int mid;
Tree[index].l = l;
Tree[index].r = r;
Tree[index].Max = Tree[index].tag = ;
mid = (l + r) >> ;
if (l == r) return;
build(index<<,l,mid);
build(index<<|,mid+,r);
}
inline void pushdown(int index) {
Tree[index<<].Max = max(Tree[index<<].Max,Tree[index].tag);
Tree[index<<|].Max = max(Tree[index<<|].Max,Tree[index].tag);
Tree[index<<].tag = max(Tree[index<<].tag,Tree[index].tag);
Tree[index<<|].tag = max(Tree[index<<|].tag,Tree[index].tag);
Tree[index].tag = ;
}
inline void pushup(int index) {
Tree[index].Max = max(Tree[index<<].Max,Tree[index<<|].Max);
}
inline void modify(int index,int l,int r,int val) {
int mid;
if (Tree[index].l == l && Tree[index].r == r) {
Tree[index].Max = max(Tree[index].Max,val);
Tree[index].tag = max(Tree[index].tag,val);
return;
}
pushdown(index);
mid = (Tree[index].l + Tree[index].r) >> ;
if (mid >= r) modify(index<<,l,r,val);
else if (mid + <= l) modify(index<<|,l,r,val);
else {
modify(index<<,l,mid,val);
modify(index<<|,mid+,r,val);
}
pushup(index);
}
inline int query(int index,int l,int r) {
int mid;
if (Tree[index].l == l && Tree[index].r == r) return Tree[index].Max;
pushdown(index);
mid = (Tree[index].l + Tree[index].r) >> ;
if (mid >= r) return query(index<<,l,r);
else if (mid + <= l) return query(index<<|,l,r);
else return max(query(index<<,l,mid),query(index<<|,mid+,r));
}
}; struct SegmentTree2D {
struct Node {
int l,r;
SegmentTree Max,tag;
} Tree[MAXD*+];
inline void build(int index,int l,int r) {
int mid;
Tree[index].l = l;
Tree[index].r = r;
Tree[index].Max.build(,,S);
Tree[index].tag.build(,,S);
mid = (l + r) >> ;
if (l == r) return;
build(index<<,l,mid);
build(index<<|,mid+,r);
}
inline void modify(int index,int l1,int r1,int l2,int r2,int val) {
int mid;
Tree[index].Max.modify(,l2,r2,val);
if (Tree[index].l == l1 && Tree[index].r == r1) {
Tree[index].tag.modify(,l2,r2,val);
return;
}
mid = (Tree[index].l + Tree[index].r) >> ;
if (mid >= r1) modify(index<<,l1,r1,l2,r2,val);
else if (mid + <= l1) modify(index<<|,l1,r1,l2,r2,val);
else {
modify(index<<,l1,mid,l2,r2,val);
modify(index<<|,mid+,r1,l2,r2,val);
}
}
inline int query(int index,int l1,int r1,int l2,int r2) {
int mid,ret = ;
ret = Tree[index].tag.query(,l2,r2);
if (Tree[index].l == l1 && Tree[index].r == r1) return max(ret,Tree[index].Max.query(,l2,r2));
mid = (Tree[index].l + Tree[index].r) >> ;
if (mid >= r1) return max(ret,query(index<<,l1,r1,l2,r2));
else if (mid + <= l1) return max(ret,query(index<<|,l1,r1,l2,r2));
else return max(ret,max(query(index<<,l1,mid,l2,r2),query(index<<|,mid+,r1,l2,r2)));
}
} T; template <typename T> inline void read(T &x) {
int f = ; x = ;
char c = getchar();
for (; !isdigit(c); c = getchar()) { if (c == '-') f = -f; }
for (; isdigit(c); c = getchar()) x = (x << ) + (x << ) + c - '';
x *= f;
}
template <typename T> inline void write(T x) {
if (x < ) { putchar('-'); x = -x; }
if (x > ) write(x/);
putchar(x%+'');
}
template <typename T> inline void writeln(T x) {
write(x);
puts("");
} int main() { read(D); read(S); read(N);
T.build(,,D);
while (N--) {
read(d); read(s); read(w); read(x); read(y);
tmp = T.query(,x+,x+d,y+,y+s);
T.modify(,x+,x+d,y+,y+s,tmp+w);
} writeln(T.query(,,D,,S)); return ;
}
【POI 2006】 Tet-Tetris-3D的更多相关文章
- 【HAOI 2006】 受欢迎的牛
[题目链接] 点击打开链接 [算法] 先用tarjan缩点,然后找出度为零的点,即可 [代码] #include<bits/stdc++.h> using namespace std; # ...
- 【ZJOI 2006】 物流运输
[题目链接] 点击打开链接 [算法] 令cost(i,j) = 第i天到第j天走相同的路线,路线长度的最小值 那么,只需筛选出第i天到第j天可以装卸货物的码头,然后将这些码头之间连边,跑弗洛伊德(或其 ...
- 【POI 2010】 Pilots
[题目链接] 点击打开链接 [算法] 单调队列 [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 3000010 ...
- 【POI 2010】 Antisymmetry
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2084 [算法] manacher [代码] #include<bits/std ...
- 【POI 2007】 山峰和山谷
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1102 [算法] 广度优先搜索 [代码] #include<bits/stdc+ ...
- 【POI word】使用POI实现对Word的读取以及生成
项目结构如下: 那第一部分:先是读取Word文档 package com.it.WordTest; import java.io.FileInputStream; import java.io.Fil ...
- 【POI xlsx】使用POI对xlsx的单元格样式进行设置 / 使用POI对xlsx的字体进行设置
涉及到的样式都在代码中有说明: package com.it.poiTest; import java.io.FileNotFoundException; import java.io.FileOut ...
- 【BZOJ 2006】2006: [NOI2010]超级钢琴(RMQ+优先队列)
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2792 Solved: 1388 Description 小 ...
- 【POI xls】解析xls遇到的问题
问题1:Package should contain a content type part org.apache.poi.POIXMLException: org.apache.poi.openxm ...
随机推荐
- 树莓派静态IP配置
一.设置隐藏无线静态ip地址 1.用命令产生wpa_psk:wpa_passphrase “MT-WiFi” “@boozhong.com” 2.sudo nano /etc/network/inte ...
- JavaSE的static、final、abstract修饰符
static :静态常量,静态方法,静态代码块 静态变量: 静态变量属于类的,使用类名来访问,非静态变量是属于对象的,"必须"使用对象来访问. 注意: ...
- 自己动手实现浏览器,21天自制chromium:起手篇
转:https://zhuanlan.zhihu.com/p/29101613?utm_medium=social&utm_source=qq 大家好,我又来了.这篇是21天自制原子弹的姐妹篇 ...
- 模拟 nbut1225 NEW RDSP MODE I
传送门:点击打开链接 题意:输入n.m,x.刚開始有一个1~n的排列.然后定义了一种操作.是将数组中的偶数位数字选出来,依照顺序放到数组最前面,奇数位依照顺序放到偶数位的后面,进行m次这种操作.输出之 ...
- C++写动态站点之HelloWorld!
演示样例源码下载地址:Fetch_Platform.7z 更复杂的代码可參考本博客BBS的实现 简单的说.动态站点就是能够动态变更的站点.动态变化的内容通常来自后端数据库.例如以下省略万字(动态站点) ...
- C#连接数据库 增删改查
- mybatis 简单项目步骤
mybatis.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configura ...
- 几个简单的程序看PHP的垃圾回收机制
每一种计算机语言都有自己的自动垃圾回收机制,让程序员不必过分关心程序内存分配,php也不例外,但是在面向对象编程(OOP)编程中,有些对象需要显式的销毁,防止程序执行内存溢出. 一.PHP 垃圾回收机 ...
- springmvc学习笔记(18)-json数据交互
springmvc学习笔记(18)-json数据交互 标签: springmvc springmvc学习笔记18-json数据交互 springmvc进行json交互 环境准备 加入json转换的依赖 ...
- Appium basic UI check cases_from sample
@Test public void testUIComputation() throws Exception { // populate text fields with values populat ...