hdu 1255 线段树 求矩形面积的交

hdu(1255)——覆盖的面积(线段树求面积交) 给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. 虽说覆盖两次区域的面积,但是这道题实际上就是求矩形的面积交。 膜拜能够想出这种解法的神牛,竟然能把实际的东西用这么抽象的语言表示出来,实在是佩服,现在关于扫描线的题才做了几道,没有对其深刻理解,但是多练总可以理解的,奋斗吧!!ACMer!!我是永远不会服输的。加油! 下面还是附上题解,写的不够详细清楚还请多多见谅。 首先我想说 阅读详情

在 hdu1542 的基础上 再加一个calen2函数

#include<stdio.h>
#include<stdlib.h>
#include <algorithm>
#define ls o<<1
#define rs o<<1|1
#define N 2010
void fre(){freopen("t.txt","r",stdin);}
using namespace std;
struct node{
    double x,y1,y2;
    int f;
}Line[N];
struct node1{
    double lf,rf,cnt,cnt2;
    int l,r,c;
}tree[N*3];
double y[N];
int cmp(node a,node b)
{
    return a.x < b.x;
}
int cmp1(double a,double b)
{
    return a < b;
}
void bulid(int o,int l,int r)
{
    int m = l+(r-l)/2;
    tree[o].c=0;tree[o].cnt=0;
    tree[o].cnt2=0;
    tree[o].l=l;
    tree[o].r=r;
    tree[o].lf=y[l];
    tree[o].rf=y[r];
    if(l+1==r) return;//注意返回条件
    bulid(ls,l,m);
    bulid(rs,m,r);//注意这里不用mid+1
}
void calen(int t)
{
    if(tree[t].c>0)
    {
        tree[t].cnt=tree[t].rf-tree[t].lf;
        return ;
    }
    if(tree[t].l+1==tree[t].r) tree[t].cnt=0;
    else tree[t].cnt=tree[2*t].cnt+tree[2*t+1].cnt;
}
void calen2(int t)//新加的函数
{
    if(tree[t].c > 1)
    {
        tree[t].cnt2 = tree[t].rf - tree[t].lf;
        return;
    }
    if(tree[t].l+1==tree[t].r) tree[t].cnt2=0;
    else if(tree[t].c == 1)
    {
        tree[t].cnt2 = tree[2*t].cnt + tree[2*t+1].cnt;
    }
    else tree[t].cnt2 = tree[2*t].cnt2 + tree[2*t+1].cnt2;
}
void updata(int t,node e)
{
    if(e.y1 <= tree[t].lf && e.y2>=tree[t].rf)
    {
        tree[t].c+=e.f;
        calen(t);
        calen2(t);
        return;
    }
    if(e.y1 < tree[2*t].rf ) updata(2*t,e);
    if(e.y2 > tree[2*t+1].lf) updata(2*t+1,e);
    calen(t);
    calen2(t);
}
int main()
{
    //fre();
    int i,n,kase,t;
    scanf("%d",&kase);
    double x1,y1,x2,y2,ans;
    while(kase--)
    {
        scanf("%d",&n);
        t=1;

        for(i=1;i<=n;i++)
        {
            scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
            Line[t].x=x1;
            Line[t].y1=y1;
            Line[t].y2=y2;
            Line[t].f=1;
            y[t]=y1;

            Line[t+1].x=x2;
            Line[t+1].y1=y1;
            Line[t+1].y2=y2;
            Line[t+1].f=-1;
            y[t+1]=y2;
            t+=2;
        }
        sort(Line+1,Line+t,cmp);
        sort(y+1,y+t,cmp1);
        bulid(1,1,t-1);

        ans=0;
        for(i=1;i<t;i++)
        {
            ans+=tree[1].cnt2*(Line[i].x - Line[i-1].x);
            updata(1,Line[i]);
        }
        printf("%.2lf\n",ans);
    }
    return 0;
}


100天精通Oracle-实战系列(第33天)RHEL 7 安装 Oracle 12CR2 RAC 数据库 阅读详情

相关推荐

解决在封装自定义IP时加入ila,或者其他ip核时出错的情况

在查阅很多资料后,明白了这个应该是软件bug,但是最终还是解决了问题 我们只需要删除

weixin_42553916的博客 3604

HDU-1255 覆盖的面积 (线段树 求矩形覆盖面积)

1000个矩形,坐标范围1e5,求所有矩形的总覆盖面积。

hmc0411的博客 1211

基于PLC的茶叶揉捻机自动控制系统设计【附代码】

茶叶揉捻是初茶加工过程中的一道关键工序,通过揉捻可以使鲜茶叶成条、碎茶及叶组织细胞破损等。影响茶叶成条率、碎茶率和叶组织细胞破损的主要因素包括揉捻时间、压力和揉捻桶转速。为了提高茶叶品质的稳定性和减轻工人的劳动强度,本文提出了一种基于PLC自动控制技术的茶叶揉捻机控制系统设计。📊 PLC自动化设计 | 毕业设计指导 | 工业自动化解决方案。✅ 具体问题可以私信或查看文章底部二维码。✅ 感恩科研路上每一位志同道合的伙伴!

lagougongzuoshi的博客 1343

hdu 1255 覆盖的面积

线段树 扫描线 离散化

weixin_46266058的博客 367

UWB学习——day4

总的来说,BPM-BPSK调制方案是一种利用脉冲位置和相位来编码信息的高效数字调制技术,特别适用于UWB通信系统,以实现高速数据传输和频谱效率。这种方式将时间和相位综合使用,从而提高了数据传输的容量。总之,超外差结构是一种接收器设计,通过将不同频率的信号转换到一个共同的中间频率来提高信号选择性和抗干扰性。超外差结构是一种用于接收器的电子电路设计,它的目标是从无线信号中提取有用的信息,比如音频、数据或图像。该芯片的接收机是超外差结构,所谓超外差结构一种基于频率转换的接收器架构,旨在提高信号选择性和抗干扰性。

许帅的博客 2557

figma MCP + cursor如何将设计稿生成前端页面

Figma MCP配置与代码生成指南 本文详细介绍了如何在Cursor中配置Figma MCP(多上下文处理器)的完整流程:从获取Figma API密钥、设置MCP服务器配置,到添加代码生成规则。关键步骤包括生成Figm a个人访问令牌、配置cursor settings文件、启用MCP服务,以及设置代码规则(包含TypeScript/Vue技术栈规范、BEM命名规则等)。最后提供了将Figma设计稿转化为Vue页面的prompt模板,涵盖文件结构、图片处理、样式规范等具体要求,确保生成代码与设计稿高度一致

weixin_45644355的博客 2908

hdu1255——矩形面积并(两次覆盖以上)

题目链接:https://vjudge.net/problem/HDU-1255 Description 给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. Input 输入数据的第一行是一个正整数T(1<=T<=100),代表测试数据的数量.每个测试数据的第一行是一个正整数N(1<=N<=1000),代表矩形的数量,然后是N行数据,每一...

mumei的博客 761

超详细!Linux 服务器 6 大核心性能测试(附自动脚本 + 结果分析秘籍)---Linux 服务器性能测试文档

本文档旨在提供 Linux 服务器的 CPU、内存和磁盘性能测试方案,包括详细的测试大纲、操作步骤以及一键化测试脚本,帮助管理员快速评估服务器性能状况。通过以上测试方案,可以全面评估 Linux 服务器的 CPU、内存和磁盘性能,为系统优化、容量规划和问题排查提供重要参考依据。使用 sysbench 进行 CPU 基准测试。使用 sysbench 测试内存读写性能。使用 fio 工具进行更全面的磁盘测试。使用 dd 命令测试磁盘顺序读写性能。使用 dd 命令测试内存读写速度。记录磁盘 IO 性能。

jundao1997的专栏 381

hdu1255(线段树——矩形面积交)

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1255 题意:求N个矩形中,求被覆盖至少俩次的面积和 分析:覆盖两次即col[rt]>=2就好。一开始将线段pushdown到叶子节点,根据col[rt]>=2才pushup上来,差点超时了,其实可以lazy标志,整段更新的,只是没想到而已。 用sum[rt][0]表示该节点rt...

weixin_34356310的博客 156

[特殊字符] 2026终极实战:Python爬取得物App球鞋实时交易价格 —— 从签名破解到数据可视化全栈指南

价格敏感度:热门鞋款(如Air Jordan 1、Yeezy 350、Dunk SB)价格每分钟都在波动,短线套利空间巨大。稀缺性:限量发售、联名款、地区限定,导致供需关系实时变化。数据壁垒:得物App使用自研WMS签名算法设备指纹绑定动态请求头加密,是爬虫工程师的“练兵场”。本博客将手把手带你从零搭建一套生产级得物球鞋价格爬虫系统,涵盖:抓包与逆向分析(mitmproxy + Frida)签名算法逆向(Python复刻)设备模拟与心跳保活(ADB + uiautomator2)

2201_76125261的博客 1125

Office系列完全干净卸载工具合集(最全)

使用 Microsoft Fix it 卸载 Microsoft Office 套件 一、Windows 7、Windows Vista或Windows XP下卸载Office 1.MicrosoftEasyFix50416 工具用来卸载office 2003 MicrosoftEasyFix50416_Office2003.msi 2.MicrosoftEasyFix50154 工具用来卸载office 2007 MicrosoftEasyFix50154_Office2007.msi 3.Microso

业精于勤,荒于嬉 3万+

HDU 1255(线段树&离散化&扫描线)详细解析

题目链接 题目解析: 该题目要求 求取众多矩形重叠部分的面积,可以采用扫描线的方法来解决。 扫描线 首先来看一个利用扫描线实现的 计算所有矩形覆盖区域面积(不算重复面积)的求解过程。 在下图中,利用蓝线从下往上扫描所有的平行于x轴的边,当接触到的是下边的时候,将该边对应的区间值都加上1(表示该区域又覆盖了一次),接触到上边的时候,减去1(该区域少覆盖一次)。 而每次扫描到边的时候,将所有上一次值不为0的区间(处于覆盖状态的区间)的区间长度和 lenlenlen 乘以两次扫描的高度差(hi−hi−1h_{i

龙卡的博客 827

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【hdu1255】线段树求矩形面积交

【hdu1255】线段树求矩形面积交 题意大概就是上图这个样子。&lt;=100组测试数据,每组&lt;=1000个矩形。 题解: 这个问题怎么解决。。做了上一题矩形面积并应该就会了。。 对于每个节点维护3个值: cnt:该节点所代表的这条线段被覆盖了多少次 len1:该节点所管理区间中被覆盖了&gt;=1次的线段总长 len2:该...

qq_25768269的博客 216

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

HDU 1255 覆盖的面积(线段树求矩形面积交)

题意:给出n个矩形,求出至少被两块矩形覆盖的面积。 思路:跟面积并类似的做法,不同的是每个节点要额外维护一个至少被覆盖两次的长度dcnt,此外还是要维护至少覆盖一次的长度cnt,然后每次由当前结点的cover标记和子节点的dcnt,cnt值来推出当前结点的dcnt,cnt值。 #include #include #include #include #include #include #incl

GODSPEED 953

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

HDU - 1255 覆盖的面积(线段树求矩形面积交 扫描线+离散化)

链接:线段树求矩形面积并 扫描线+离散化 1、给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. 2、看完线段树求矩形面积并 的方法后,再看这题,求的是矩形面积交,类同。 求面积时,用被覆盖2次以上的那一段乘以扫描线的距离即可,具体实现见代码。 3、 /* HDU 1255 覆盖的面积 求矩形面积交(离散化+线段树) 给定一些矩形 求被这些矩形覆盖过至少两次的...

weixin_30602505的博客 133

HDU1255求矩形面积交(线段树+扫描线)

  分情况讨论 1.cnt&gt;1 : 说明该区间被覆盖两次或以上,那么长度就可以直接计算,就是该区间的长度 剩下的情况就是cnt=1或cnt=0 2.先看叶子节点,因为是叶子没有孩子了,所以被覆盖两次货以上的长度就是0(无论cnt=1或cnt=0都是0,因为是叶子。。。) 3.不是叶子节点 ,且cnt=1.注意这里,cnt=1确切的意义是什么,应该是,可以确定,这个区间被完全覆盖了1...

QiHang的博客 350

HDU1255 覆盖的面积 —— 求矩形交面积 线段树 + 扫描线 + 离散化

题目链接:https://vjudge.net/problem/HDU-1255 给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. Input输入数据的第一行是一个正整数T(1<=T<=100),代表测试数据的数量.每个测试数据的第一行是一个正整数N(1<=N<=1000),代表矩形的数量,然后是N行数据,每一行包含四个浮点数,代表平...

weixin_30505751的博客 73

hdu1255 覆盖的面积(矩形面积交+扫描线)

http://acm.hdu.edu.cn/showproblem.php?pid=1255 题意:给你n个矩形,求他们的面积交。 思路:和hdu1542基本一样,只不过这题是求面积交。 len1代表线段被覆盖一次,len2代表线段被覆盖两次。 关键点就在节点的长度更新上。因为这里求面积的长必须是覆盖1次以上,所以线段树节点中增加变量len2,用于记录被覆盖一次以上区间的长度。

Iguodala的博客 756

hdu 1542 1255 1828 线段树矩阵并面积 交面积 重叠周长解法

我们先从hdu 1542开始http://acm.hdu.edu.cn/showproblem.php?pid=1542     这里我们先把每个矩阵的点的y轴坐标,进行一个排序,然后通过排序以后的坐标建一颗线段树。对于每个条超元线段,我们给定一个cover值,表示插入了多少根线段。然后,在把所有与y轴平行的那些线段,我们给定一个flag,标记这是属于矩阵左边(1)还是右边(-1)的线段。从左往

仰望圣光的plusplus7 1762

HDU1255 求面积交 线段树+离散化

<br />覆盖的面积 <br />Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)<br /> Total Submission(s): 880    Accepted Submission(s): 394<br /><br /><br />Problem Description<br />给定平面上若干矩形, 求出被这些矩形覆盖过至少两次的区域的面积.<br /><br /> 

ACM_DavidCN的专栏 1804

HDU - 1255 覆盖的面积(线段树-矩形交面积)

题目链接:\quadHDU - 1255题目大意:\quad以左下点和右上点的形式给nn个矩形,求出被这些矩形覆盖过至少两次的区域的面积。(多组)数据范围:1≤T≤1001≤n≤10000≤xi,yi≤100000\quad 1 \leq T \leq 100 \quad 1 \leq n \leq 1000 \quad 0 \leq x_i, y_i \leq 100000解题思路:\quad学会

XzzF1024的博客 956

【hdu1255】覆盖的面积(矩形面积交+线段树+扫描线)

想不通<cmath>库里怎么会有叫做y1的关键字 ╮(╯▽╰)╭

AFO 516

矩形面积交-线段树

hdu - 1255 世事总是如此地无常,很多事情总在意料之外。 比如,这题。 不知道是如何错的,是因为二分写得不好? 做完矩形周长并之后,就把这个代码加了两个0,就过了。 又是maxn开小了。 下面是正确代码。 建议: 学矩形周长并、面积交,先学矩形面积并。 Pro: 0 Sol: date: */ #include #include #include #i

Julyana_Lin_夜 1596

hdu1255 覆盖的面积(扫描线-矩形面积交)

题目 N(N<=1e3)个矩形,每个矩形提供左下角(x1,y1)和右上角(x2,y2)的点 四个坐标均为浮点数,且在0到1e5之间 求被矩形覆盖过至少两次的区域的面积,结果保留两位小数 思路来源 http://cache.baiducontent.com/c?m=9d78d513d9d431a54f9d94697d1cc0171c4381132ba7d7020ed28449e373...

小衣同学的博客 440
上一篇: hdu 1542 线段树求矩形并+离散化
下一篇: hdu 1146 UVa10901 Ferry Loading III
QZQmmmm
博客等级 码龄11年 77粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值