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

二维线段树 -- 点更段查

#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. Memcached目录

    Memcached 简介.安装和基本使用 Memcached基础知识 理解Memcached的分布式 Memcached存储命令 - set Memcached存储命令 - add Memcached ...

  2. golang笔记——IDE

    可选方案有 Lite IDE\GoSublime\Visual Studio Code\Goclipse\Vim 1.Lite IDE 这是国人开发的开源且跨平台的 golang 专属IDE,也算是目 ...

  3. windows系统添加删除用户命令!

    参考:net   help   usernet   help   group Net   user添加或修改用户帐户或者显示用户帐户信息. 语法net   user   [UserName   [Pa ...

  4. 浏览器兼容性之JavaScript篇

    近期公司职务变动,我大部分工作时间都在做web前端开发.工作性质主要是跟javascript和css(层叠样式表)打交道,而JavaScript兼容性一直是Web开发者的心病,当然我也不例外,虽然我大 ...

  5. 动态导入(import)和静态导入(import)的区别

    import static静态导入是JDK1.5中的新特性.一般我们导入一个类都用 import com.....ClassName;而静态导入是这样:import static com.....Cl ...

  6. mysql解决自动断开8小时未曾用过的链接

    今天有运维的同事反映,发布关键词不太稳定,点了没反应.就去线上看了一下日志,发现数据库没有链接,就查了一下问题 关于mysql自动断开的问题研究结果如下,在mysql中有相关参数设定,当数据库连接空闲 ...

  7. memcache安装

    windows下访问 http://pecl.php.net/package/memcache/3.0.8/windows 下载对应版本memcache的dll文件添加到php目录ext下 PHP.i ...

  8. Mongodb——GridFS

    GridFS用于存储和恢复那些超过16M(BSON文件限制)的文件. GridFS将文件分成大块,将每个大块存储为单独的文件.GridFS中限制chunk最大为256k.GridFS使用两个colle ...

  9. Sql统计一个字符串在另一个字符串出现的次数的函数-fnQueryCharCountFromString

    SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ),)) returns int as begin declare @pos int,@n int , ...

  10. window 下Qt for android 环境搭建

    ******************************************************************* 转自http://www.cnblogs.com/rophie/ ...