HDU 1823 Luck and Love(二维线段树)
之前只知道这个东西的大概概念,没具体去写,最近呵呵,今补上。
二维线段树 -- 点更段查
#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(二维线段树)的更多相关文章
- HDU 1823 Luck and Love 二维线段树(树套树)
点击打开链接 Luck and Love Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- hdu 1823 Luck and Love 二维线段树
题目链接 很裸的题, 唯一需要注意的就是询问时给出的区间并不是l<r, 需要判断然后交换一下, WA了好多发... #include<bits/stdc++.h> using nam ...
- HDU1823 Luck ans Love 二维线段树
Luck and Love HDU - 1823 世界上上最远的距离不是相隔天涯海角 而是我在你面前 可你却不知道我爱你 ―― 张小娴 前段日子,枫冰叶子给Wiskey ...
- [hdu1823]Luck and Love(二维线段树)
解题关键:二维线段树模板题(单点修改.查询max) #include<cstdio> #include<cstring> #include<algorithm> # ...
- hdu 5465 Clarke and puzzle 二维线段树
Clarke and puzzle Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...
- HDU 4819 Mosaic(13年长春现场 二维线段树)
HDU 4819 Mosaic 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4819 题意:给定一个n*n的矩阵,每次给定一个子矩阵区域(x,y,l) ...
- Luck and Love(二维线段树)
Luck and Love Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- hdu 4819 二维线段树模板
/* HDU 4819 Mosaic 题意:查询某个矩形内的最大最小值, 修改矩形内某点的值为该矩形(Mi+MA)/2; 二维线段树模板: 区间最值,单点更新. */ #include<bits ...
- HDU 4819 Mosaic (二维线段树)
Mosaic Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others)Total S ...
随机推荐
- jquery 清除动画队列不疑惑
$(this).siblings().stop().fadeTo(200, 0.3); jquery动画存在一个队列, 会把事件产生的动画 放在一个队列中,当来不及执行这些事件队列的时候,会在事件结束 ...
- python中raw_input() 与 input()
参考网址:http://www.cnblogs.com/way_testlife/archive/2011/03/29/1999283.html 在python中如何接收一个输入的字符串. 举个例子: ...
- linux程序设计1
a.out 的意思是 assembler output,即汇编输出. C语言的头文件一般位于 /usr/include/ 目录下,而依赖于特定 Linux 版本的头文件通常可在目录 /usr/incl ...
- 江湖救急:webbrowser中js文件丢失问题~
页面中,有一个按钮,点击按钮通过js create 了一个 script标签 ,链接加载一个外部js文件,执行该js文件 $("#a").click(function(){ $.g ...
- VTK初学一,e_Triangle三角形的绘制
#ifndef INITIAL_OPENGL #define INITIAL_OPENGL #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRend ...
- 繁华模拟赛day8 科技树
/* 贪心,很明显是越容易升级的越先升级 */ #include<iostream> #include<cstdio> #include<string> #incl ...
- 数据库左连接left join、右连接right join、内连接inner join on 及 where条件查询的区别
join on 与 where 条件的执行先后顺序: join on 条件先执行,where条件后执行:join on的条件在连接表时过滤,而where则是在生成中间表后对临时表过滤 left joi ...
- Hadoop 之MongoDB
NoSql 简介: COUCH DB REDIS MONGODB NEO4J HBASE BIGTABLE 存储非结构化数据 索引多:单键,多键,数组,全文,2D. MonggoDB数据类型: nul ...
- apt-get 按照php7后apache 输出php源文件
需要添加php7的模块 sudo apt-get install libapache2-mod-php7.0
- ckeditor、ckeditor配置--整合
1.将ckeditor和ckfinder文件夹拷入项目文件夹中,刷新项目. 2.ckfinder把文件夹中的bin目录下的dll文件(CKFinder.dll)添加到网站的引用中,防止出现找不到类的错 ...