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 ...
随机推荐
- php去掉字符串的最后一个字符附substr()的用法
转自:http://www.jb51.net/article/26604.htm 今天项目中用到,去掉字符串中的最后一个字符 原字符串1,2,3,4,5,6, 去掉最后一个字符"," ...
- jQuery 学习之路(2):选择器与过滤器
一.基本选择器 标签选择器: $('button') ID选择器: $('#id1') 类选择器: $('.class1') 多重选择器: $('#id1,.class1,button') 全体选择器 ...
- php防注入
引发 SQL 注入攻击的主要原因,是因为以下两点原因: 1. php 配置文件 php.ini 中的 magic_quotes_gpc选项没有打开,被置为 off 2. 开发者没有对数据类型进行检查和 ...
- 【bzoj4034】[HAOI2015]树上操作
题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的点权都 ...
- jQuery框架分析第一章: 第一个匿名函数
我的jQuery版本为1.7* 这个版本代码比之前的版本优化了很多,结构也清晰了不少,就用最新的吧. 打开jQuery源代码 首先你能看到所有代码被一个 (function(window,undefi ...
- JS中的prototype(原文地址:http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html)
JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个 ...
- MySQL编译安装
1.准备工作 其官方站点为http://www.mysql.com/ 为了避免发生端口冲突.程序冲突现象.建议先查询MySQL软件的安装情况,确认没有使用以RPM方式安装的mysql-server.m ...
- Android学习笔记(一)——新建一个项目
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 1.打开Android Studio时出现以下界面,点击”start a new Android Studio ...
- 关于vco
关于vco:vco是vSphere 4开始,在vCenter中默认附件安装的一个新组件.它的作用主要是提供工作流管理.这么说可能有些抽象,让人搞不明白vco到底是做什么用的.其实很简单,以前的vCen ...
- Ubuntu 15.10下droidbox安装使用
DroidBox是一个动态分析Android代码的的分析工具.其目前的安装环境为:Linux/Unix/MacOSX 下面是安装步骤 一. 安装Android SDK 并添加环境变量 export P ...