ZOJ 2859 二维线段树
思路:自己写的第二发二维线段树1A。哈哈,看来对二维的push操作比較了解了;可是还没遇到在两个线段树中同一时候进行push操作的,事实上这题我是想在x维和y维同一时候进行push操作的。可是想了好久不会。然后看到这题又给出10秒,然后想想在x维线段直接单点查询肯定也过了,然后在第二维就仅仅有pushup操作。在第一维线段树没有pushup操作。要是在第一维也有pushup操作的话。那就不用单点查询那么慢了。
只是也A了,想找题即在二维同一时候进行pushup和pushdown操作的。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<queue>
#include<set>
#include<cmath>
#include<bitset>
#define mem(a,b) memset(a,b,sizeof(a))
#define lson i<<1,l,mid
#define rson i<<1|1,mid+1,r
#define llson j<<1,l,mid
#define rrson j<<1|1,mid+1,r
#define INF 0x7fffffff
#define maxn 1010
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
int Map[maxn][maxn],Min[maxn][maxn];
int n,q,t,ans;
void pushup(int i,int j)
{
Min[i][j]=min(Min[i][j<<1],Min[i][j<<1|1]);
}
void build_y(int i,int u,int j,int l,int r)
{
if(l==r)
{
Min[i][j]=Map[u][l];
return ;
}
int mid=(l+r)>>1;
build_y(i,u,llson);build_y(i,u,rrson);
pushup(i,j);
}
void build_x(int i,int l,int r)
{
if(l==r)
{
build_y(i,l,1,1,n);
return ;
}
int mid=(l+r)>>1;
build_x(lson);build_x(rson);
}
int query_y(int i,int j,int l,int r,int y1,int y2)
{
if(l==y1&&y2==r) return Min[i][j];
int mid=(l+r)>>1;
if(y2<=mid) return query_y(i,llson,y1,y2);
else if(y1>mid) return query_y(i,rrson,y1,y2);
else return min(query_y(i,llson,y1,mid),query_y(i,rrson,mid+1,y2));
}
void query_x(int i,int l,int r,int x1,int x2,int y1,int y2)
{
if(l==r)
{
ans=min(ans,query_y(i,1,1,n,y1,y2));
return ;
}
int mid=(l+r)>>1;
if(x1<=mid) query_x(lson,x1,x2,y1,y2);
if(x2>mid) query_x(rson,x1,x2,y1,y2);
}
int main()
{
freopen("test.txt","r",stdin);
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&Map[i][j]);
build_x(1,1,n);
scanf("%d",&q);
while(q--)
{
int x1,y1,x2,y2;
ans=INF;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
query_x(1,1,n,x1,x2,y1,y2);
printf("%d\n",ans);
}
}
return 0;
}
ZOJ 2859 二维线段树的更多相关文章
- ZOJ 1859 Matrix Searching(二维线段树)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1859 Matrix Searching Time Limit: 10 Seco ...
- UVA 11297 线段树套线段树(二维线段树)
题目大意: 就是在二维的空间内进行单个的修改,或者进行整块矩形区域的最大最小值查询 二维线段树树,要注意的是第一维上不是叶子形成的第二维线段树和叶子形成的第二维线段树要 不同的处理方式,非叶子形成的 ...
- POJ2155 Matrix二维线段树经典题
题目链接 二维树状数组 #include<iostream> #include<math.h> #include<algorithm> #include<st ...
- HDU 1823 Luck and Love(二维线段树)
之前只知道这个东西的大概概念,没具体去写,最近呵呵,今补上. 二维线段树 -- 点更段查 #include <cstdio> #include <cstring> #inclu ...
- poj 2155:Matrix(二维线段树,矩阵取反,好题)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 17880 Accepted: 6709 Descripti ...
- poj 1195:Mobile phones(二维线段树,矩阵求和)
Mobile phones Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 14391 Accepted: 6685 De ...
- POJ 2155 Matrix (二维线段树)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 17226 Accepted: 6461 Descripti ...
- HDU 4819 Mosaic (二维线段树)
Mosaic Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others)Total S ...
- HDU 4819 Mosaic --二维线段树(树套树)
题意: 给一个矩阵,每次查询一个子矩阵内的最大最小值,然后更新子矩阵中心点为(Max+Min)/2. 解法: 由于是矩阵,且要求区间最大最小和更新单点,很容易想到二维的线段树,可是因为之前没写过二维的 ...
随机推荐
- 日常[系统]:Linux新人报到(吐槽%&%……&¥……%
昨天换了系统,从win7换到了NOIP必须面对的Linux系统. 不得不说,真的很不适应.原本右上角的三个按钮变到了左上角. 可爱的DEVCPP被无情的抛弃了. 又用不惯guide,只好用文本编辑器写 ...
- HLS协议详解
1. HLS HLS是为移动设备开发的基于HTTP的流媒体解决方案. 2. 原理: 将视频或流切分成小片(TS), 并建立索引(M3U8). 支持视频流:H.264: 音频流:AAC 3. M3U8文 ...
- windows图标变空白解决方案
背景 对磁盘软件路径进行规整,把磁盘不同类型软件进行分类存储后,部分软件在windows桌面为空白,有些在start menu不为空白但是发送至桌面后却变成空白 解决方法 工具:search ever ...
- OpenJudge-百练-2755-动规
动态规划的话,我们中心思想就是,设一个num数组,num[ i ][ j ] 代表从i的大小中,取出 j 种物品的方法数. 当不取j种物品的时候,我们就让num[ i ][ j ] =num[ i ] ...
- 基于mysql数据库 关于sql优化的一些问题
mysql数据库有一个explain关键词,可以对select语句进行分析并且输出详细的select执行过程的详细信息. 对sql explain后输出几个字段: id:SELECT查询的标识符,每个 ...
- php中session和cookie的使用及区别
1.cookie的使用 什么是 Cookie? cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 P ...
- centos挂载本地镜像作为yum源
1.安装Centos后默认的Yum源如下 ll /etc/yum.repos.d/ [root@localhost ~]# ll /etc/yum.repos.d/ total 32 -rw-r- ...
- NYOJ-183赚钱啦,bellman//spfa水过,,题还是蛮变态的赶脚~~
赚钱啦 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 某国家里有N个城市,分别编号为0~N-1,一个精明的商人准备从0号城市旅行到N-1号城市,在旅行的过程中,从一个城 ...
- 使用jemalloc优化nginx和mysql内存管理
预先安装autoconf 和 make yum -y install autoconf make jemalloc的安装jiemalloc 开源项目网站 http://www.canonware.co ...
- 【dp】codeforces C. Vladik and Memorable Trip
http://codeforces.com/contest/811/problem/C [题意] 给定一个自然数序列,在这个序列中找出几个不相交段,使得每个段的异或值之和相加最大. 段的异或值这样定义 ...