hdu 1828 扫面线 +矩形周长+线段树

博客探讨了如何计算多个矩形重叠后的图形周长问题,指出现有题解的潜在错误,并提供了作者自己的理解和修正过的代码,代码中包含详细注释。
摘要由CSDN通过智能技术生成

题意:求多个矩形的重叠之后的图形的周长。

这道题网上好多题解,我觉得他们说的有问题,修改了一个人的代码
写入了自己的理解 
代码中有详细的注释
 

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#define en '\n'
using namespace std;
const int MAXN=22222;
const int pian=10010;
#define lson i*2,l,m
#define rson i*2+1,m+1,r
int tag[MAXN*4],suf[MAXN*4],pre[MAXN*4],numseg[MAXN*4],sum[MAXN*4];
struct node
{
    int l,r,h,d;
    node(){}
    node(int a,int b,int c,int d):l(a),r(b),h(c),d(d){}
    bool operator < (const node & b)const
    {
        return h<b.h;
    }
}nodes[MAXN];
void PushUp(int i,int l,int r)///  别的代码这里各种判断是不必要的
{
        numseg[i]=numseg[i*2]+numseg[i*2+1];
        if(suf[i*2] && pre[i*2+1]) numseg[i]-=2;
        sum[i]=sum[i*2]+sum[i*2+1];
        pre[i]=pre[i*2];
        suf[i]=suf[i*2+1];
}
void update(int ql,int qr,int v,int i,int 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值