题目链接: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的更多相关文章

  1. hdu - 1823 - Luck and Love(线段树)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/SCNU_Jiechao/article/details/24406391 题意:Wiskey招女友, ...

  2. HDU 1823 Luck and Love 二维线段树(树套树)

    点击打开链接 Luck and Love Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  3. HDU 1823 Luck and Love(二维线段树)

    之前只知道这个东西的大概概念,没具体去写,最近呵呵,今补上. 二维线段树 -- 点更段查 #include <cstdio> #include <cstring> #inclu ...

  4. hdu 1823 Luck and Love 二维线段树

    题目链接 很裸的题, 唯一需要注意的就是询问时给出的区间并不是l<r, 需要判断然后交换一下, WA了好多发... #include<bits/stdc++.h> using nam ...

  5. HDU 1823 Luck and Love (二维线段树&区间最值)题解

    思路: 树套树,先维护x树,再维护y树,多练练应该就能懂了 代码: #include<cstdio> #include<cmath> #include<cstring&g ...

  6. HDU 1847-Good Luck in CET-4 Everybody!-博弈SG函数模板

    Problem Description 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Cici都是如此.当然,作为在考场浸润了十几载 ...

  7. HDU 5074 Luck Competition (暴力,概率)

    题意:有 n 个人参加比赛,给出n-1个人的成绩,然后要选出一个幸运的人,先把所有的分数求平均数,然后再*2/3,那个不大于这个数,且最接近的数,就是最幸运的, 让你设置最后一个人的分,使他是最幸运的 ...

  8. 二维线段树 HDU 1823最简单的入门题

    xiaoz 征婚,首先输入M,表示有M个操作. 借下来M行,对每一行   Ih a l     I 表示有一个MM报名,H是高度, a是活泼度,L是缘分. 或   Q h1 h2 a1 a2    求 ...

  9. 【HDOJ】1823 Luck and Love

    二维线段树.wa了几次,不存在输出-1,而不再是一位小数. #include <cstdio> #include <cstring> #define MAXN 105 #def ...

  10. HDU1823 Luck ans Love 二维线段树

    Luck and Love HDU - 1823 世界上上最远的距离不是相隔天涯海角 而是我在你面前 可你却不知道我爱你                 ―― 张小娴 前段日子,枫冰叶子给Wiskey ...

随机推荐

  1. Sybase PowerDesign 导入数据库结构formSqlserver

    采用Sybase PD 创建数据库设计是常见的方法,如果遇到链接数据源时,无法直接链接系统数据源,而且在Sybase PD中无法直接创建odbc数据源时, 可以到控制面板中创建数据源,一步步的网络上有 ...

  2. x01.os.11: IPC 路线图

    学习的最好方法就是看代码,所以我们不妨跟着 IPC 的调用路线图,来学习学习 IPC. 从 x01.Lab.Download 下载代码后,首先进入 main.c 文件,在 TestA 中,有这么一句: ...

  3. Windows 安装ELK

    在Windows服务器上安装ELK logstash在windows平台下不能监控磁盘文件,用nxlog代替,监控文件并把内容发送到logstash 部署环境 Os :Windows 7 logsta ...

  4. js 读取 cookie

    (新摘未验证)// 将document.cookie的值以名/值对组成的一个对象返回 // 假设储存cookie的值的时候是采用encodeURIComponent()函数编码的 function g ...

  5. Spark standlone安装与配置

    spark的安装简单,去官网下载与集群hadoop版本相一致的文件即可. 解压后,主要需要修改spark-evn.sh文件. 以spark standlone为例,配置dn1,nn2为master,使 ...

  6. JavaWeb学习----Cookie实现记住密码的功能

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  7. 禁止Visual Studio启动时自动连接TFS服务器

    在默认设置情况下,Visual Studio启动时,会自动连接上次打开过的TFS服务器.这种设计能够提高开发人员的工作效率,避免每次手动连接TFS服务器. 但是在某些情景中,也会给人造成不必要的麻烦, ...

  8. [转]ANDROID NOTIFICATIONS USING CORDOVA AND IONIC

    本文转自:http://intown.biz/2014/04/11/android-notifications/ ANDROID NOTIFICATIONS USING CORDOVA AND ION ...

  9. UVALive 5061 Lightning Energy Report --LCA

    题意:给一棵树,每次给u到v的路径上所有点加上一个值,最后输出每个点的权值(初始为0) 解法:每次在u,v间加k时,只要让u,v点的权值加上k,u,v的LCA处减去k(因为LCA的子树中加了两个k), ...

  10. 第26章 创建型模式大PK

    26.1 工厂方法模式 VS 建造者模式 26.1.1 按工厂方法建造超人 (1)产品:两类超人,成年超人和未成年超人. (2)工厂:这里选择简单工厂 [编程实验]工厂方法建造超人 //创建型模式大P ...