之前只知道这个东西的大概概念,没具体去写,最近呵呵,今补上。

二维线段树 -- 点更段查

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. int N,M;
  7. double ma[110<<2][1010<<2];
  8. void pushUpY(int xu,int u){
  9. ma[xu][u]=max(ma[xu][u<<1], ma[xu][u<<1|1]);
  10. }
  11. void pushUpX(int xu,int u){
  12. ma[xu][u]=max(ma[xu<<1][u], ma[xu<<1|1][u]);
  13. }
  14. void updateY(int xu,int xl,int xr,int u,int l,int r,int x,int y,double val){
  15. if(l==r){
  16. ma[xu][u] = max(ma[xu][u], val);
  17. if(xl<xr) pushUpX(xu,u);
  18. return ;
  19. }
  20. int mid = (l+r)>>1;
  21. if(y<=mid) updateY(xu,xl,xr,u<<1,l,mid,x,y,val);
  22. else updateY(xu,xl,xr,u<<1|1,mid+1,r,x,y,val);
  23. pushUpY(xu,u);
  24. }
  25. void updateX(int u,int l,int r,int x,int y,double val){
  26. if(l==r){
  27. updateY(u,l,r,1,1,M,x,y,val);
  28. return ;
  29. }
  30. int mid = (l+r)>>1;
  31. if(x<=mid) updateX(u<<1,l,mid,x,y,val);
  32. else updateX(u<<1|1,mid+1,r,x,y,val);
  33. updateY(u,l,r,1,1,M,x,y,val);
  34. }
  35. double queryY(int xu,int u,int l,int r,int y1,int y2){
  36. if(l==y1 && r==y2) return ma[xu][u];
  37. int mid = (l+r)>>1;
  38. if(y2<=mid) return queryY(xu,u<<1,l,mid,y1,y2);
  39. else if(y1>mid) return queryY(xu,u<<1|1,mid+1,r,y1,y2);
  40. else return max(queryY(xu,u<<1,l,mid,y1,mid), queryY(xu,u<<1|1,mid+1,r,mid+1,y2));
  41. }
  42. double queryX(int u,int l,int r,int x1,int x2,int y1,int y2){
  43. if(l==x1 && r==x2) return queryY(u,1,1,M,y1,y2);
  44. int mid = (l+r)>>1;
  45. if(x2<=mid) return queryX(u<<1,l,mid,x1,x2,y1,y2);
  46. else if(x1>mid) return queryX(u<<1|1,mid+1,r,x1,x2,y1,y2);
  47. else return max(queryX(u<<1,l,mid,x1,mid,y1,y2), queryX(u<<1|1,mid+1,r,mid+1,x2,y1,y2));
  48. }
  49. void buildY(int xu,int u,int l,int r){
  50. ma[xu][u]=-1.;
  51. if(l==r) return ;
  52. int mid = (l+r)>>1;
  53. buildY(xu,u<<1,l,mid);
  54. buildY(xu,u<<1|1,mid+1,r);
  55. }
  56. void buildX(int u,int l,int r){
  57. if(l==r){buildY(u,1,1,M);return ;}
  58. int mid = (l+r)>>1;
  59. buildX(u<<1,l,mid);
  60. buildX(u<<1|1,mid+1,r);
  61. buildY(u,1,1,M);
  62. }
  63. int main(){
  64. int m;
  65. while(~scanf("%d",&m) && m){
  66. N=101,M=1001;
  67. buildX(1,1,N);
  68. char op[3];
  69. for(int i=0;i<m;++i){
  70. scanf("%s",op);
  71. if(op[0]=='I'){
  72. int h;double a,l;
  73. scanf("%d%lf%lf",&h,&a,&l);
  74. updateX(1,1,N,h-99,int(a*10)+1,l);
  75. }
  76. else {
  77. int h1,h2;double a1,a2;
  78. scanf("%d%d%lf%lf",&h1,&h2,&a1,&a2);
  79. if(h1>h2) swap(h1,h2);
  80. if(a1>a2) swap(a1,a2);
  81. double ans = queryX(1,1,N,h1-99,h2-99,int(a1*10)+1,int(a2*10)+1);
  82. if(ans<0) puts("-1");
  83. else printf("%.1lf\n",ans);
  84. }
  85. }
  86. }
  87. return 0;
  88. }

HDU 1823 Luck and Love(二维线段树)的更多相关文章

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

    点击打开链接 Luck and Love Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  2. hdu 1823 Luck and Love 二维线段树

    题目链接 很裸的题, 唯一需要注意的就是询问时给出的区间并不是l<r, 需要判断然后交换一下, WA了好多发... #include<bits/stdc++.h> using nam ...

  3. HDU1823 Luck ans Love 二维线段树

    Luck and Love HDU - 1823 世界上上最远的距离不是相隔天涯海角 而是我在你面前 可你却不知道我爱你                 ―― 张小娴 前段日子,枫冰叶子给Wiskey ...

  4. [hdu1823]Luck and Love(二维线段树)

    解题关键:二维线段树模板题(单点修改.查询max) #include<cstdio> #include<cstring> #include<algorithm> # ...

  5. hdu 5465 Clarke and puzzle 二维线段树

    Clarke and puzzle Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...

  6. HDU 4819 Mosaic(13年长春现场 二维线段树)

    HDU 4819 Mosaic 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4819 题意:给定一个n*n的矩阵,每次给定一个子矩阵区域(x,y,l) ...

  7. Luck and Love(二维线段树)

    Luck and Love Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...

  8. hdu 4819 二维线段树模板

    /* HDU 4819 Mosaic 题意:查询某个矩形内的最大最小值, 修改矩形内某点的值为该矩形(Mi+MA)/2; 二维线段树模板: 区间最值,单点更新. */ #include<bits ...

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

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

随机推荐

  1. php去掉字符串的最后一个字符附substr()的用法

    转自:http://www.jb51.net/article/26604.htm 今天项目中用到,去掉字符串中的最后一个字符 原字符串1,2,3,4,5,6, 去掉最后一个字符"," ...

  2. jQuery 学习之路(2):选择器与过滤器

    一.基本选择器 标签选择器: $('button') ID选择器: $('#id1') 类选择器: $('.class1') 多重选择器: $('#id1,.class1,button') 全体选择器 ...

  3. php防注入

    引发 SQL 注入攻击的主要原因,是因为以下两点原因: 1. php 配置文件 php.ini 中的 magic_quotes_gpc选项没有打开,被置为 off 2. 开发者没有对数据类型进行检查和 ...

  4. 【bzoj4034】[HAOI2015]树上操作

    题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的点权都 ...

  5. jQuery框架分析第一章: 第一个匿名函数

    我的jQuery版本为1.7* 这个版本代码比之前的版本优化了很多,结构也清晰了不少,就用最新的吧. 打开jQuery源代码 首先你能看到所有代码被一个 (function(window,undefi ...

  6. JS中的prototype(原文地址:http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html)

    JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个 ...

  7. MySQL编译安装

    1.准备工作 其官方站点为http://www.mysql.com/ 为了避免发生端口冲突.程序冲突现象.建议先查询MySQL软件的安装情况,确认没有使用以RPM方式安装的mysql-server.m ...

  8. Android学习笔记(一)——新建一个项目

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 1.打开Android Studio时出现以下界面,点击”start a new Android Studio ...

  9. 关于vco

    关于vco:vco是vSphere 4开始,在vCenter中默认附件安装的一个新组件.它的作用主要是提供工作流管理.这么说可能有些抽象,让人搞不明白vco到底是做什么用的.其实很简单,以前的vCen ...

  10. Ubuntu 15.10下droidbox安装使用

    DroidBox是一个动态分析Android代码的的分析工具.其目前的安装环境为:Linux/Unix/MacOSX 下面是安装步骤 一. 安装Android SDK 并添加环境变量 export P ...