hdu-1823 Luck and Love
题目链接:hdu1823二维线段树单点更新区间查询
题意
向一个100*1000的二维空间中插入点,每次查询时,查询区间最大值.
题解
身高既然是100~200,那就相当于100;活泼度相当于1000.所以建立100*1000的二维线段树.
大坑有如下几个
输出-1,而不是-1.0
输入的h1,h2,a1,a2,大小不一定,需要加上一个判断
代码
#include<iostream>
#include<vector>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<string>
using namespace std;
typedef long long ll;
#define re(i,n) for(int i=0;i<n;i++)
const int maxn = 4;
const int xsz = 107, ysz = 1007;
double h,a, l;
double hf, ht, af, at;
double tr[(xsz+1)<<2][(ysz+1)<<2];
#define lson(id) id<<1,f,mid
#define rson(id) id<<1|1,mid+1,t
void yinsert(int x, int y, int f, int t){
tr[x][y] = max(tr[x][y], l);
if (f == t)return;
int mid = (f + t) >> 1;
if (a <= mid)yinsert(x, lson(y));
else yinsert(x, rson(y));
}
void xinsert(int id,int f,int t){
yinsert(id, 1, 0, ysz);
if (f == t)return;
int mid = (f + t) >> 1;
if (h <= mid)xinsert(lson(id));
else xinsert(rson(id));
}
void yquery(int x, int y, int f, int t){
if (af <= f&&at >= t){
l = max(l, tr[x][y]);
return;
}
int mid = (f + t) >> 1;
if (af <= mid)yquery(x, lson(y));
if (at > mid)yquery(x, rson(y));
}
void xquery(int x, int f, int t){
if (hf <= f&&ht >= t){
yquery(x, 1, 0, ysz);
return;
}
int mid = (f + t) >> 1;
if (ht > mid)xquery(rson(x));
if(hf<=mid) xquery(lson(x));
}
void yclear(int x, int y, int f, int t){
tr[x][y] = -1;
if (f == t)return;
int mid = (f + t) >> 1;
yclear(x, lson(y)), yclear(x, rson(y));
}
void xclear(int x, int f, int t){
yclear(x, 1, 0, ysz);
if (f == t)return;
int mid = (f + t) >> 1;
xclear(lson(x)), xclear(rson(x));
}
int main(){
freopen("in.txt", "r", stdin);
int Q;
while (scanf("%d", &Q) && Q){
xclear(1, 0, xsz);
while (Q--){
char op[2]; scanf("%s", op);
if (op[0] == 'I'){
scanf("%lf%lf%lf", &h, &a, &l);
h -= 100, a *= 10;
xinsert(1,0,xsz);
}
else{
scanf("%lf%lf%lf%lf", &hf, &ht, &af, &at);
hf -= 100, ht -= 100, af *= 10, at *= 10;
if (hf > ht)swap(hf, ht); if (af > at)swap(af, at);
l= -1;
xquery(1,0,xsz);
if (l == -1)puts("-1");
else printf("%.1lf\n", l);
}
}
}
return 0;
}
hdu-1823 Luck and Love的更多相关文章
- hdu - 1823 - Luck and Love(线段树)
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/SCNU_Jiechao/article/details/24406391 题意:Wiskey招女友, ...
- 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(二维线段树)
之前只知道这个东西的大概概念,没具体去写,最近呵呵,今补上. 二维线段树 -- 点更段查 #include <cstdio> #include <cstring> #inclu ...
- hdu 1823 Luck and Love 二维线段树
题目链接 很裸的题, 唯一需要注意的就是询问时给出的区间并不是l<r, 需要判断然后交换一下, WA了好多发... #include<bits/stdc++.h> using nam ...
- HDU 1823 Luck and Love (二维线段树&区间最值)题解
思路: 树套树,先维护x树,再维护y树,多练练应该就能懂了 代码: #include<cstdio> #include<cmath> #include<cstring&g ...
- HDU 1847-Good Luck in CET-4 Everybody!-博弈SG函数模板
Problem Description 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Cici都是如此.当然,作为在考场浸润了十几载 ...
- HDU 5074 Luck Competition (暴力,概率)
题意:有 n 个人参加比赛,给出n-1个人的成绩,然后要选出一个幸运的人,先把所有的分数求平均数,然后再*2/3,那个不大于这个数,且最接近的数,就是最幸运的, 让你设置最后一个人的分,使他是最幸运的 ...
- 二维线段树 HDU 1823最简单的入门题
xiaoz 征婚,首先输入M,表示有M个操作. 借下来M行,对每一行 Ih a l I 表示有一个MM报名,H是高度, a是活泼度,L是缘分. 或 Q h1 h2 a1 a2 求 ...
- 【HDOJ】1823 Luck and Love
二维线段树.wa了几次,不存在输出-1,而不再是一位小数. #include <cstdio> #include <cstring> #define MAXN 105 #def ...
- HDU1823 Luck ans Love 二维线段树
Luck and Love HDU - 1823 世界上上最远的距离不是相隔天涯海角 而是我在你面前 可你却不知道我爱你 ―― 张小娴 前段日子,枫冰叶子给Wiskey ...
随机推荐
- 深度学习笔记------windows系统下进行Linux-Ubuntu14.04双系统安装笔记(二)
在上一篇文章中介绍了新手如何安装Ubuntu14.04的双系统,本文会说明Ubuntu系统下搜狗输入法的安装,并就我遇见的一些bug给出最简单的解决办法. 第一部分.搜狗输入法的安装 本身搜狗输入法的 ...
- linux mount 硬盘挂载和卸载
Linux 挂载 [root@whp6 ~]# mount /dev/sdb5 /mnt/ [root@whp6 ~]# df -h Filesystem Size Used Avail Use% M ...
- 如何在Chrome39添加360抢票王插件
前言: 版本:Chrome 39.0.2171.95 m CRX文件来源:ext.se.360.cn 本文地址:http://www.cnblogs.com/go2bed/p/4206714.html ...
- TopCoder SRM 642 Div.2 1000 --二分+BFS
题意: 给你一张图,N个点(0~N-1),m条边,国王要从0到N-1,国王携带一个值,当走到一条边权大于此值的边时,要么不走,要么提升该边的边权,提升k个单位花费k^2块钱,国王就带了B块钱,问能携带 ...
- 洛谷P1120小木棍[DFS]
题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度. 给出每段小木棍的长度,编 ...
- AC日记——阶乘和 openjudge 1.6 15
15:阶乘和 总时间限制: 1000ms 内存限制: 65536kB 描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=5*4*3*2*1. 输入正整 ...
- copy-paste component
http://www.cnblogs.com/wantnon/p/4579008.html
- GNU make规则的命令④书写命令
命令回显 通常, make 在执行命令行之前会把要执行的命令行输出到标准输出设备.我们称之为"回显",就好像我们在 shell 环境下输入命令执行时一样. 如果规则的命令行以字符& ...
- Ninject 学习杂记
IOC容器的DI实现并不依赖于方法调用拦截,而是通过DI容器内部自己通过反射的方式生成需要的类型实例,并调用实例的成员.然后再把实例返回给容器外部环境使用. Ninject本身及其扩展库,还针对特定的 ...
- css3属性书写顺序
今天写了个小demo想要利用transition 和transform以及transition-delay来实现鼠标移上去的延时动画,结果发现不能实现transition的变化效果.调试后发现只有把 ...