Zju -- 2859 Matrix Searching(线段树)
来源:互联网 发布:网络平台招商方案 编辑:程序博客网 时间:2024/06/07 02:17
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2859
Matrix Searching
Time Limit: 10 Seconds Memory Limit: 32768 KB
Given an n*n matrix A, whose entries Ai,j are integer numbers ( 1 <= i <= n, 1 <= j <= n ). An operation FIND the minimun number in a given ssub-matrix.
Input
The first line of the input contains a single integer T , the number of test cases.
For each test case, the first line contains one integer n (1 <= n <= 300), which is the sizes of the matrix, respectively. The next n lines with n integers each gives the elements of the matrix.
The next line contains a single integer N (1 <= N <= 1,000,000), the number of queries. The next N lines give one query on each line, with four integers r1, c1, r2, c2 (1 <= r1 <= r2 <= n, 1 <= c1 <= c2 <= n), which are the indices of the upper-left corner and lower-right corner of the sub-matrix in question.
Output
For each test case, print N lines with one number on each line, the required minimum integer in the sub-matrix.
Sample Input
1
2
2 -1
2 3
2
1 1 2 2
1 1 2 1
Sample Output
-1
2
题意:
给定一个n*n(n <= 300)的矩阵,
给出 a,b,c,d
询问a行b列到c行d列矩阵中的最小值。
思路:
一维线段树是一颗完全二叉树,那么二维线段树无疑就是一颗完全四叉树,换言
之,每个结点有四个儿子,这里为了空间不浪费,将所有结点记录在一个一维数组中
,每个结点的四个儿子采用编号的方式存储,在建树之前将每个结点的信息全部初始
化,初始化的时候需要注意的是每次将当前结点的四个儿子清空,然后判断它本身是
否是叶子结点,可以通过x和y区间端点是否重合来判断,最后再来生成四个儿子编号
,然后往下递归,递归结束后根据四个儿子的最小值更新当前的最小值。再来看询问
,和一维的情况类似,一维是对区间交,而二维则是对矩形交,如果询问的二维区间
和当前结点管理的二维区间没有交集,显然不可能有最小值,直接返回inf,否则如果
询问的二维区间完全包含了当前结点管理的二维区间,那么返回结点最小值。否则递
归当前结点的四个儿子,取最小值,回归到根节点就得到了询问区间的最值了。
需要注意的是在建树的时候不要在叶子结点生成多余的儿子结点,这样内存会多
一倍,如果开得不够大有可能下标越界,开得太大有可能超内存。还有就是在二维线
段树的结点上信息会多了不少,能节省空间尽量节省,比如每个结点管理的区间端点
不可能很大,所以不需要int,short就足够了。
- Zju -- 2859 Matrix Searching(线段树)
- ZOJ-2859 Matrix Searching (二维线段树)
- ZOJ 2859 Matrix Searching 二维线段树 || 二维RMQ
- ZOJ 1859 Matrix Searching(二维线段树)
- zoj 2859 Matrix Searching
- zoj 2859 Matrix Searching
- zoj 2859 Matrix Searching
- ZOJ 2859 Matrix Searching
- zoj 2859 Matrix Searching
- zju 2840 File Searching
- ZOJ 2859 Matrix Searching 二维rmq
- ZOJ 2859 Matrix Searching(二维RMQ)
- ZJU 3349 Special Subsequence【线段树】
- zoj zju 3324 线段树 离散化
- ZJU 1610 Count the Colors 线段树
- zoj Matrix Searching
- ZOJ 题目2859 Matrix Searching(二维RMQ)
- zoj zju 3597 Hit the Target! 线段树 扫描线
- 一些 C++ 自测题
- altium 元件名中英文对照
- MySQL 5.1 无法启动 1067 错误解决方法
- GetWindowRect和GetClientRect(转)
- Verison Name/Code的获取
- Zju -- 2859 Matrix Searching(线段树)
- 关于二分查找的那些事
- 图片实现等比例缩放
- 国外书签网站
- How To Delete Archive Log Files Out Of +Asm
- 经典的原型链例子。
- 数据库中乐观锁与悲观锁的概念
- 改变dialog的位置
- mysql手册总结2