题意:求多个矩形的重叠之后的图形的周长。
这道题网上好多题解,我觉得他们说的有问题,修改了一个人的代码
写入了自己的理解
代码中有详细的注释
#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