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

二维线段树 -- 点更段查

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std; int N,M;
double ma[110<<2][1010<<2];
void pushUpY(int xu,int u){
ma[xu][u]=max(ma[xu][u<<1], ma[xu][u<<1|1]);
}
void pushUpX(int xu,int u){
ma[xu][u]=max(ma[xu<<1][u], ma[xu<<1|1][u]);
}
void updateY(int xu,int xl,int xr,int u,int l,int r,int x,int y,double val){
if(l==r){
ma[xu][u] = max(ma[xu][u], val);
if(xl<xr) pushUpX(xu,u);
return ;
}
int mid = (l+r)>>1;
if(y<=mid) updateY(xu,xl,xr,u<<1,l,mid,x,y,val);
else updateY(xu,xl,xr,u<<1|1,mid+1,r,x,y,val);
pushUpY(xu,u);
}
void updateX(int u,int l,int r,int x,int y,double val){
if(l==r){
updateY(u,l,r,1,1,M,x,y,val);
return ;
}
int mid = (l+r)>>1;
if(x<=mid) updateX(u<<1,l,mid,x,y,val);
else updateX(u<<1|1,mid+1,r,x,y,val);
updateY(u,l,r,1,1,M,x,y,val);
}
double queryY(int xu,int u,int l,int r,int y1,int y2){
if(l==y1 && r==y2) return ma[xu][u];
int mid = (l+r)>>1;
if(y2<=mid) return queryY(xu,u<<1,l,mid,y1,y2);
else if(y1>mid) return queryY(xu,u<<1|1,mid+1,r,y1,y2);
else return max(queryY(xu,u<<1,l,mid,y1,mid), queryY(xu,u<<1|1,mid+1,r,mid+1,y2));
}
double queryX(int u,int l,int r,int x1,int x2,int y1,int y2){
if(l==x1 && r==x2) return queryY(u,1,1,M,y1,y2);
int mid = (l+r)>>1;
if(x2<=mid) return queryX(u<<1,l,mid,x1,x2,y1,y2);
else if(x1>mid) return queryX(u<<1|1,mid+1,r,x1,x2,y1,y2);
else return max(queryX(u<<1,l,mid,x1,mid,y1,y2), queryX(u<<1|1,mid+1,r,mid+1,x2,y1,y2));
}
void buildY(int xu,int u,int l,int r){
ma[xu][u]=-1.;
if(l==r) return ;
int mid = (l+r)>>1;
buildY(xu,u<<1,l,mid);
buildY(xu,u<<1|1,mid+1,r);
}
void buildX(int u,int l,int r){
if(l==r){buildY(u,1,1,M);return ;}
int mid = (l+r)>>1;
buildX(u<<1,l,mid);
buildX(u<<1|1,mid+1,r);
buildY(u,1,1,M);
}
int main(){
int m;
while(~scanf("%d",&m) && m){
N=101,M=1001;
buildX(1,1,N);
char op[3];
for(int i=0;i<m;++i){
scanf("%s",op);
if(op[0]=='I'){
int h;double a,l;
scanf("%d%lf%lf",&h,&a,&l);
updateX(1,1,N,h-99,int(a*10)+1,l);
}
else {
int h1,h2;double a1,a2;
scanf("%d%d%lf%lf",&h1,&h2,&a1,&a2);
if(h1>h2) swap(h1,h2);
if(a1>a2) swap(a1,a2);
double ans = queryX(1,1,N,h1-99,h2-99,int(a1*10)+1,int(a2*10)+1);
if(ans<0) puts("-1");
else printf("%.1lf\n",ans);
}
}
}
return 0;
}

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. linux下如何查看chm文件

    转自:http://www.cnblogs.com/jesseZh/p/4036811.html (64位)    sudo dpkg -i chmsee_1.3.0-2ubuntu2_amd64.d ...

  2. ASP.NET MVC 4 的JS/CSS打包压缩功能-------过滤文件

    今天在使用MVC4打包压缩功能@Scripts.Render("~/bundles/jquery") 的时候产生了一些疑惑,问什么在App_Start文件夹下BundleConfi ...

  3. 正则表达式学习笔记(附:Java版示例代码)

    具体学习推荐:正则表达式30分钟入门教程 .         除换行符以外的任意字符\w      word,正常字符,可以当做变量名的,字母.数字.下划线.汉字\s        space,空白符 ...

  4. Aptana 中去掉“Missing semicolon”提醒

    打开“窗口”下的“首选项” 然后找到“Aptana Studio”,在其下找到并点击Validation,在右侧窗口找到Javascript Syntax Validator,在下方的Options中 ...

  5. APPCAN MAS接口之AJAX

    1.打开APPCAN IDE,文件→新建→MAS服务 2.新建MAS项目 3.新建MAS接口,访问地址http://mobile.163.com/special/chuangye/ 4.修改if_cy ...

  6. js 区分数据类型

    这是第二版,可以区分 1.基本数据类型(string.number.boolean) undefined.null 2.引用类型 数组.RegExp.函数. 自定义数据类型(通过new 函数名得到) ...

  7. 9 patch png 的上下左右

    9 patch png 的上下左右   前言: 9 patch png 图片,扩展名为.9.png,是一个标准的PNG图像,它包括额外的1个像素的边界,通过对这个边界的描述来达到我们预期的拉伸效果.a ...

  8. Unity 视频播放杂谈

    http://www.cnblogs.com/zsb517/p/4060814.html 背景:      游戏机中想加入舞蹈元素,最先的想法是开发舞蹈游戏,然后通过动画来表现舞蹈,给用户提供舞蹈教学 ...

  9. Android6.0以后动态增加权限

    private void test() throws IOException { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { in ...

  10. PyQt4自定义事件

    listview控件与updateText 相关联 self.listview.updateText.connect(self.viewlist)   updateText = QtCore.pyqt ...