思路:自己写的第二发二维线段树1A。哈哈,看来对二维的push操作比較了解了;可是还没遇到在两个线段树中同一时候进行push操作的,事实上这题我是想在x维和y维同一时候进行push操作的。可是想了好久不会。然后看到这题又给出10秒,然后想想在x维线段直接单点查询肯定也过了,然后在第二维就仅仅有pushup操作。在第一维线段树没有pushup操作。要是在第一维也有pushup操作的话。那就不用单点查询那么慢了。

只是也A了,想找题即在二维同一时候进行pushup和pushdown操作的。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<map>
  6. #include<queue>
  7. #include<set>
  8. #include<cmath>
  9. #include<bitset>
  10. #define mem(a,b) memset(a,b,sizeof(a))
  11. #define lson i<<1,l,mid
  12. #define rson i<<1|1,mid+1,r
  13. #define llson j<<1,l,mid
  14. #define rrson j<<1|1,mid+1,r
  15. #define INF 0x7fffffff
  16. #define maxn 1010
  17. using namespace std;
  18. typedef long long ll;
  19. typedef unsigned long long ull;
  20. int Map[maxn][maxn],Min[maxn][maxn];
  21. int n,q,t,ans;
  22. void pushup(int i,int j)
  23. {
  24. Min[i][j]=min(Min[i][j<<1],Min[i][j<<1|1]);
  25. }
  26. void build_y(int i,int u,int j,int l,int r)
  27. {
  28. if(l==r)
  29. {
  30. Min[i][j]=Map[u][l];
  31. return ;
  32. }
  33. int mid=(l+r)>>1;
  34. build_y(i,u,llson);build_y(i,u,rrson);
  35. pushup(i,j);
  36. }
  37. void build_x(int i,int l,int r)
  38. {
  39. if(l==r)
  40. {
  41. build_y(i,l,1,1,n);
  42. return ;
  43. }
  44. int mid=(l+r)>>1;
  45. build_x(lson);build_x(rson);
  46. }
  47. int query_y(int i,int j,int l,int r,int y1,int y2)
  48. {
  49. if(l==y1&&y2==r) return Min[i][j];
  50. int mid=(l+r)>>1;
  51. if(y2<=mid) return query_y(i,llson,y1,y2);
  52. else if(y1>mid) return query_y(i,rrson,y1,y2);
  53. else return min(query_y(i,llson,y1,mid),query_y(i,rrson,mid+1,y2));
  54. }
  55. void query_x(int i,int l,int r,int x1,int x2,int y1,int y2)
  56. {
  57. if(l==r)
  58. {
  59. ans=min(ans,query_y(i,1,1,n,y1,y2));
  60. return ;
  61. }
  62. int mid=(l+r)>>1;
  63. if(x1<=mid) query_x(lson,x1,x2,y1,y2);
  64. if(x2>mid) query_x(rson,x1,x2,y1,y2);
  65. }
  66. int main()
  67. {
  68. freopen("test.txt","r",stdin);
  69. scanf("%d",&t);
  70. while(t--)
  71. {
  72. scanf("%d",&n);
  73. for(int i=1;i<=n;i++)
  74. for(int j=1;j<=n;j++)
  75. scanf("%d",&Map[i][j]);
  76. build_x(1,1,n);
  77. scanf("%d",&q);
  78. while(q--)
  79. {
  80. int x1,y1,x2,y2;
  81. ans=INF;
  82. scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
  83. query_x(1,1,n,x1,x2,y1,y2);
  84. printf("%d\n",ans);
  85. }
  86. }
  87. return 0;
  88. }

ZOJ 2859 二维线段树的更多相关文章

  1. ZOJ 1859 Matrix Searching(二维线段树)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1859 Matrix Searching Time Limit: 10 Seco ...

  2. UVA 11297 线段树套线段树(二维线段树)

    题目大意: 就是在二维的空间内进行单个的修改,或者进行整块矩形区域的最大最小值查询 二维线段树树,要注意的是第一维上不是叶子形成的第二维线段树和叶子形成的第二维线段树要  不同的处理方式,非叶子形成的 ...

  3. POJ2155 Matrix二维线段树经典题

    题目链接 二维树状数组 #include<iostream> #include<math.h> #include<algorithm> #include<st ...

  4. HDU 1823 Luck and Love(二维线段树)

    之前只知道这个东西的大概概念,没具体去写,最近呵呵,今补上. 二维线段树 -- 点更段查 #include <cstdio> #include <cstring> #inclu ...

  5. poj 2155:Matrix(二维线段树,矩阵取反,好题)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 17880   Accepted: 6709 Descripti ...

  6. poj 1195:Mobile phones(二维线段树,矩阵求和)

    Mobile phones Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 14391   Accepted: 6685 De ...

  7. POJ 2155 Matrix (二维线段树)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 17226   Accepted: 6461 Descripti ...

  8. HDU 4819 Mosaic (二维线段树)

    Mosaic Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others)Total S ...

  9. HDU 4819 Mosaic --二维线段树(树套树)

    题意: 给一个矩阵,每次查询一个子矩阵内的最大最小值,然后更新子矩阵中心点为(Max+Min)/2. 解法: 由于是矩阵,且要求区间最大最小和更新单点,很容易想到二维的线段树,可是因为之前没写过二维的 ...

随机推荐

  1. Bootstrap 3 Glyphicons are not working

    Bootstrap 3 Glyphicons are not working 解答1 Note to readers: be sure to read @user2261073's comment a ...

  2. 【简●解】[ZJOI2005]午餐

    [简●解][ZJOI2005]午餐 [关键词] \(DP\) 排序/贪心 [分析] 首先,一个很明显的贪心思路,就是吃的慢的人先打饭.所以把数据按吃饭时间从大到小排一遍序. 根据\(dp\)的尿性,比 ...

  3. 记录xerces使用(VS2017 C++)

    1.编译xerces,获得dll文件和lib文件 2.将dll文件和lib文件拷贝到使用xerces的工程目录里面去 3.配置VS2017 C/C++  ->  All Options --&g ...

  4. PHP将数据库的数据转换成json格式

    header('content-type:application/json;charset=utf8');  $results = array();     while ($row = mysql_f ...

  5. 5. COLUMNS

    5. COLUMNS 表COLUMNS提供表中列的信息. INFORMATION_SCHEMA Name SHOW Name Remarks TABLE_CATALOG TABLE_SCHEMA TA ...

  6. php 后端规范

    后端框架地址: git@gitee.com:xielisen/xcore.git 框架使用规范,内部沟通 Controller命名规范 1, 首字母大写,其余小写 2, 对应数据库名称. 不要下划线 ...

  7. Django框架基础知识04-模板标签与模板继承

    1.常用的模板标签 -作用是什么? -常用标签 总结:语法 {% tag %} {% endtag %} {% tag 参数 参数 %} 2.模板的继承与引用 -引用 include标签 -继承 ex ...

  8. python_OS 模块

    os模块 用于提供系统级别的操作 os.getcwd() # 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") # 改变当前脚本工作目 ...

  9. 杭电 5326 Work (并查集求子结点为k的结点数)

    Description It’s an interesting experience to move from ICPC to work, end my college life and start ...

  10. set()集合基本操作

    运用频次:☆☆ set是一个无序且不重复元素集,基本操作如下: 1. 创建set集合,会自动转换成set类型 2. add():添加元素 def add(self, *args, **kwargs): ...