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 ...
随机推荐
- python中raw_input() 与 input()
参考网址:http://www.cnblogs.com/way_testlife/archive/2011/03/29/1999283.html 在python中如何接收一个输入的字符串. 举个例子: ...
- php 快速排序法
function quicksort(array $arr = array()){ $len = count($arr); if ($len > 1) { $key = $arr[0]; $l_ ...
- MySql的安装及配置详细指引!
一.安装My Sql数据库 1.1,首先下载MySQL与HeidiSQL工具,双击打开后可以看到名为”mysql-5.0.22-win32 Setup.exe”的安装程序,双击执行该程序. 1.2,打 ...
- 【GXZ的原创】C++小游戏——五子棋
前些时候考完试自己编的带有胜负判定的五子棋. 操作方法:WSAD或↑↓←→移动下棋位置,Space或Enter放置. 如果游戏出现bug,欢迎大家在评论区反馈. #include <stdio. ...
- 用MVC的辅助方法自定义了两个控件:“可编辑的下拉框控件”和“文本框日历控件”
接触MVC也没多长时间,一开始学的时候绝得MVC结构比较清晰.后来入了门具体操作下来感觉MVC控件怎么这么少还不可以像ASP.net form那样拖拽.这样设计界面来,想我种以前没学过JS,Jquer ...
- Swift2.1 语法指南——错误处理
原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...
- 转:利用node压缩、合并js,css,图片
1.安装nodejs http://nodejs.org/ 2.安装各自的node package js我用的是UglifyJS github地址:https://github.com/mishoo/ ...
- grunt 使用
grunt 服务端, grunt-cli 客户端 1.grunt 插件安装: package.json, 存放grunt所需插件 { "name": "demo" ...
- maven引入jar包时,一个jar的引入错误,会导致后来的jar包的引入。
maven引入本jar包时,引入失败. 问题是另一个jar没有引入正确.
- 4 个最好的 Linux 引导程序
导读 当你打开你的机器,开机自检(POST)成功完成后,BIOS(基本输入输出系统)立即定位所配置的引导介质,并从 MBR(主引导记录)或 GUID(全局唯一标识符)分区表读取一些命令,这是引导介质的 ...