【HDU 4819】Mosaic
【题目链接】
【算法】
二维线段树(树套树)
【代码】
#include<bits/stdc++.h>
using namespace std;
#define MAXN 800 int i,q,n,xa,xb,ya,yb,l,tmp,T,Max,Min,x,y; struct info { int Max,Min; } Tree[MAXN*][MAXN*]; 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("");
} inline void push_up(int D,int index) {
Tree[D][index].Max = max(Tree[D][index<<].Max,Tree[D][index<<|].Max);
Tree[D][index].Min = min(Tree[D][index<<].Min,Tree[D][index<<|].Min);
} inline void build_y(int D,int index,int l,int r,int opt) {
int mid,val;
if (l == r) {
if (opt == ) {
read(val);
Tree[D][index].Max = Tree[D][index].Min = val;
} else {
Tree[D][index].Max = max(Tree[D<<][index].Max,Tree[D<<|][index].Max);
Tree[D][index].Min = min(Tree[D<<][index].Min,Tree[D<<|][index].Min);
}
return;
}
mid = (l + r) >> ;
build_y(D,index<<,l,mid,opt);
build_y(D,index<<|,mid+,r,opt);
push_up(D,index);
} inline void build_x(int index,int l,int r) {
int mid;
if (l == r) {
build_y(index,,,n,);
return;
}
mid = (l + r) >> ;
build_x(index<<,l,mid);
build_x(index<<|,mid+,r);
build_y(index,,,n,);
} inline void modify_y(int D,int index,int l,int r,int val,int opt) {
int mid;
if (l == r) {
if (opt == ) Tree[D][index].Max = Tree[D][index].Min = val;
else {
Tree[D][index].Max = max(Tree[D<<][index].Max,Tree[D<<|][index].Max);
Tree[D][index].Min = min(Tree[D<<][index].Min,Tree[D<<|][index].Min);
}
return;
}
mid = (l + r) >> ;
if (mid >= y) modify_y(D,index<<,l,mid,val,opt);
else modify_y(D,index<<|,mid+,r,val,opt);
push_up(D,index);
} inline void modify_x(int index,int l,int r,int val) {
int mid;
if (l == r) {
modify_y(index,,,n,val,);
return;
}
mid = (l + r) >> ;
if (mid >= x) modify_x(index<<,l,mid,val);
else modify_x(index<<|,mid+,r,val);
modify_y(index,,,n,val,);
} inline int query_min_y(int D,int index,int l,int r,int x,int y) {
int mid;
if (l == x && r == y) return Tree[D][index].Min;
mid = (l + r) >> ;
if (mid >= y) return query_min_y(D,index<<,l,mid,x,y);
else if (mid + <= x) return query_min_y(D,index<<|,mid+,r,x,y);
else return min(query_min_y(D,index<<,l,mid,x,mid),query_min_y(D,index<<|,mid+,r,mid+,y));
} inline int query_min_x(int index,int l,int r,int x,int y) {
int mid;
if (l == x && r == y) return query_min_y(index,,,n,ya,yb);
mid = (l + r) >> ;
if (mid >= y) return query_min_x(index<<,l,mid,x,y);
else if (mid + <= x) return query_min_x(index<<|,mid+,r,x,y);
else return min(query_min_x(index<<,l,mid,x,mid),query_min_x(index<<|,mid+,r,mid+,y));
} inline int query_max_y(int D,int index,int l,int r,int x,int y) {
int mid;
if (l == x && r == y) return Tree[D][index].Max;
mid = (l + r) >> ;
if (mid >= y) return query_max_y(D,index<<,l,mid,x,y);
else if (mid + <= x) return query_max_y(D,index<<|,mid+,r,x,y);
else return max(query_max_y(D,index<<,l,mid,x,mid),query_max_y(D,index<<|,mid+,r,mid+,y));
} inline int query_max_x(int index,int l,int r,int x,int y) {
int mid;
if (l == x && r == y) return query_max_y(index,,,n,ya,yb);
mid = (l + r) >> ;
if (mid >= y) return query_max_x(index<<,l,mid,x,y);
else if (mid + <= x) return query_max_x(index<<|,mid+,r,x,y);
else return max(query_max_x(index<<,l,mid,x,mid),query_max_x(index<<|,mid+,r,mid+,y));
} int main() { read(T);
for (i = ; i <= T; i++) {
read(n);
build_x(,,n);
read(q);
cout<<"Case #"<< i << ':' << endl;
while (q--) {
read(x); read(y); read(l);
xa = max(,x-l/);
xb = min(n,x+l/);
ya = max(,y-l/);
yb = min(n,y+l/);
Max = query_max_x(,,n,xa,xb);
Min = query_min_x(,,n,xa,xb);
tmp = (Max + Min) / ;
writeln(tmp);
modify_x(,,n,tmp);
}
}
return ;
}
【HDU 4819】Mosaic的更多相关文章
- 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题
[HDU 3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...
- 【HDU 5647】DZY Loves Connecting(树DP)
pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ...
- -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】
[把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ...
- 【HDU 2196】 Computer(树的直径)
[HDU 2196] Computer(树的直径) 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 这题可以用树形DP解决,自然也可以用最直观的方法解 ...
- 【HDU 2196】 Computer (树形DP)
[HDU 2196] Computer 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 刘汝佳<算法竞赛入门经典>P282页留下了这个问题 ...
- 【HDU 5145】 NPY and girls(组合+莫队)
pid=5145">[HDU 5145] NPY and girls(组合+莫队) NPY and girls Time Limit: 8000/4000 MS (Java/Other ...
- 【hdu 1043】Eight
[题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=1043 [题意] 会给你很多组数据; 让你输出这组数据到目标状态的具体步骤; [题解] 从12345 ...
- 【HDU 3068】 最长回文
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3068 [算法] Manacher算法求最长回文子串 [代码] #include<bits/s ...
- 【HDU 4699】 Editor
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4699 [算法] 维护两个栈,一个栈放光标之前的数,另外一个放光标之后的数 在维护栈的同时求最大前缀 ...
随机推荐
- Delphi+MySQL:TADOQuery使用插入中文乱码解决方法
Delphi+MySQL:TADOQuery使用插入中文乱码解决方法 with adoquery dobeginclose;sql.clear;sql.text:=' insert into test ...
- django学习之- simple_tag
如何将前端的数据直接通过python模块进行渲染,使用django的simple_tag功能,如下 django后端编写: 1:在对应的app目录下创建目录:templatetags 2:在templ ...
- delphi 与 sqlite3
delphi与sqlite file:0 前言 本文的目的在于采用流水账方式来记录学习delphi访问嵌入式数据库sqlite中的一些点滴.欢迎各位同好共同学习和批评指正. file:1 准备工作 ...
- 洛谷 P3865 【模板】ST表
P3865 [模板]ST表 题目背景 这是一道ST表经典题——静态区间最大值 请注意最大数据时限只有0.8s,数据强度不低,请务必保证你的每次查询复杂度为 O(1)O(1) 题目描述 给定一个长度为 ...
- 吃我一记咸鱼突刺——使用板载RTC定时开机
前言 原创文章,转载引用务必注明链接.水平有限,欢迎指正. 2016年3月30日 Lemuntu(Base On Jessie) 3.10.37 原载于Lemaker论坛.汇总于此. 看ATC2603 ...
- 封装算法: 模板方法(Template Method)模式
template method(模板方法)模式是一种行为型设计模式.它在一个方法中定义了算法的骨架(这种方法被称为template method.模板方法),并将算法的详细步骤放到子类中去实现.tem ...
- java utf8字符 导出csv 文件的乱码问题。
在输出的格式为UTF-8的格式,但是打开CSV文件一直为乱码,后来参考了这里的代码,搞定了乱码问题,原文请参考:http://hbase.iteye.com/blog/1172200 private ...
- 用C++、Qt实现的小游戏2048
窗口布局与游戏截图: 实现思路: 1.使用二维数组模拟整个游戏网格,并将二维数组中每个数的大小用作游戏中每个网格中的数据. 2.将对游戏的数据及数据的操作(即玩家的操作对游戏数据的影响)作为一个类,游 ...
- selenium-python问题日记
今天在学习selenium时遇到了两个问题,在这里记录一下: 使用unittest框架组织了测试用例后,拓展一下功能就成了我最想做的事情, 所以决定添加发邮件功能. 使用python自带的smtpli ...
- 《STL源代码剖析》---stl_deque.h阅读笔记(2)
看完,<STL源代码剖析>---stl_deque.h阅读笔记(1)后.再看代码: G++ 2.91.57,cygnus\cygwin-b20\include\g++\stl_deque. ...