【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 [算法] 维护两个栈,一个栈放光标之前的数,另外一个放光标之后的数 在维护栈的同时求最大前缀 ...
随机推荐
- hdu - 3836 Equivalent Sets(强连通)
http://acm.hdu.edu.cn/showproblem.php?pid=3836 判断至少需要加几条边才能使图变成强连通 把图缩点之后统计入度为0的点和出度为0的点,然后两者中的最大值就是 ...
- Atcoder 3857 Median Sum
Problem Statement You are given N integers A1, A2, ..., AN. Consider the sums of all non-empty subse ...
- Spring中使用byName实现Beans自动装配
以下内容引用自http://wiki.jikexueyuan.com/project/spring/beans-auto-wiring/spring-autowiring-byname.html: 此 ...
- js long类型的日期转成Date,字符串StringBuilder拼接
longToDate.js //扩展Date的format方法 Date.prototype.format = function (format) { var o = { "M+" ...
- iOS开发 清除电话号码中的其他符号
最近从通讯录读取电话号码,读出得号码如:134-1814-****. 而我需要的为11位纯数字,一直找方法解决此问题,今天终于找到了.. 分享一下…… 代码如下: NSString *original ...
- Hbase调用JavaAPI实现批量导入操作
将手机上网日志文件批量导入到Hbase中.操作步骤: 1.将日志文件(请下载附件)上传到HDFS中,利用hadoop的操作命令上传:hadoop fs -put input / 2.创建Hbase ...
- Spring-boot和Spring-Cloud遇到的问题
1.spring cloud 使用 feign 启动报错 错误信息 org/springframework/cloud/client/loadbalancer/LoadBalancedRetryFa ...
- linux find 命令查找 复制
find 查找 find . -mtime -2 -a -path './.git*' -prune , -path './Cache' -prune -a -exec cp {} one \; rm ...
- C# step by step 学习笔记8 CHAPTER 9 使用枚举和结构创建值类型
C# 2012 step by step 学习笔记8 CHAPTER 9 使用枚举和结构创建值类型 本章内容 声明一个枚举类型 创建并使用一个枚举类型 声明一个结构类型 创建并使用一个结构类型 解释结 ...
- vmware下安装mac os虚拟机问题,最后还是最终攻克了被一个小失误给陷害了
今天决定来体验一下苹果系统.虚拟机文件大概用了一天半时间才下载完毕,解压后是39G大小,赶紧安装VMWARE.然后载入虚拟机文件体验.開始当我苹果标志出来的时候,我以为成功了.但是那个小齿轮一直在转, ...